这样,那位提供上传空间信息,一经“人在昆明”采用,我给提供信息者出分(100给我这个穷人留个活口). 人在昆明如果你方便提供的话就请出手,但不强求,怎么说都是朋友。
活 活化石 Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-03 #61 这样,那位提供上传空间信息,一经“人在昆明”采用,我给提供信息者出分(100给我这个穷人留个活口). 人在昆明如果你方便提供的话就请出手,但不强求,怎么说都是朋友。
P PangPang Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-03 #62 我是个快毕业的学生,不久前用delphi与SQL SEVER搞了个C/S结构的应用程序。而且学校给发奖金。我却围着这个问题搞了一个多星期。还是没多大进展。希望有哪位高手细述经典。
N newdream Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-04 #63 to 活化石: 应你的邀请来到这里,看来这个老问题真是困扰不少人。不敢说自己很有经验,只是发表一点看法和大家一起讨论。 数据库面向对象编程的关键时如何将数据库对象(连接、表、查询等)变成程序中的对象。 这个过程类似: 数据库连接、表、查询->数据存取对象->业务对象->界面对象 这样就把对数据记录的直接访问变成了对业务对象的数据成员(在Delphi一般是通过属性)的访问。 以数据表为例,有2种途径: 下策:直接将数据表转化为对象,每个字段对应一个对象属性,数据集变成对象集。缺点:工作量大,无法在界面中使用数据感知控件。 上策:将数据表转化为数据集对象(TClientDataSet等),通过数据集对象来实现RAD,建立业务对象和数据集对象的协作关系。只将少量业务逻辑复杂的运算,再由数据集对象转化为业务对象处理。优点:可以充分利用VCL组件,包括在界面中使用数据感知控件。 实际上,VCL中已经有不少组件完成了对数据库元素的封装,我们不必从头作起,关键在如何体现面向对象思想上。 在《Delphi面向对象编程思想》书中我有这方面的讨论和示例程序。我的设计模型(一个用户维护程序的例子)是: 界面(用户管理)——业务对象(TUser用户)——数据集对象(存放用户记录的表) 这样,向前,我即可以给出Windows Form的界面,又能给出Web Form的实现界面。同样,我用TClientDataSet作数据集对象,向后,我可以连桌面数据库,也可以用DataSnap的数据包连接COM+再连接RDBMS。我还给出了这样结构的各种示例程序: 界面(用户管理)——》WinForm/WebForm《——业务对象(TUser用户)——》DLL/COM+/WebService 《——数据集对象(存放用户记录的表)
to 活化石: 应你的邀请来到这里,看来这个老问题真是困扰不少人。不敢说自己很有经验,只是发表一点看法和大家一起讨论。 数据库面向对象编程的关键时如何将数据库对象(连接、表、查询等)变成程序中的对象。 这个过程类似: 数据库连接、表、查询->数据存取对象->业务对象->界面对象 这样就把对数据记录的直接访问变成了对业务对象的数据成员(在Delphi一般是通过属性)的访问。 以数据表为例,有2种途径: 下策:直接将数据表转化为对象,每个字段对应一个对象属性,数据集变成对象集。缺点:工作量大,无法在界面中使用数据感知控件。 上策:将数据表转化为数据集对象(TClientDataSet等),通过数据集对象来实现RAD,建立业务对象和数据集对象的协作关系。只将少量业务逻辑复杂的运算,再由数据集对象转化为业务对象处理。优点:可以充分利用VCL组件,包括在界面中使用数据感知控件。 实际上,VCL中已经有不少组件完成了对数据库元素的封装,我们不必从头作起,关键在如何体现面向对象思想上。 在《Delphi面向对象编程思想》书中我有这方面的讨论和示例程序。我的设计模型(一个用户维护程序的例子)是: 界面(用户管理)——业务对象(TUser用户)——数据集对象(存放用户记录的表) 这样,向前,我即可以给出Windows Form的界面,又能给出Web Form的实现界面。同样,我用TClientDataSet作数据集对象,向后,我可以连桌面数据库,也可以用DataSnap的数据包连接COM+再连接RDBMS。我还给出了这样结构的各种示例程序: 界面(用户管理)——》WinForm/WebForm《——业务对象(TUser用户)——》DLL/COM+/WebService 《——数据集对象(存放用户记录的表)
活 活化石 Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-04 #64 谢谢,刘先生。我看到的一些文章谈到的基本上是您所说的“下策”,贵著何时出版,互动出版上还没相映的信息,不管如何一定拜读。您的第三方控件(一)我有收藏,但觉得有点遗憾的是重量级的控件介绍相应不多,我猜想和版权有关吧,但仍是国内介绍此方面的第一本书。祝愿多出好书,让我等收益。再次感谢
谢谢,刘先生。我看到的一些文章谈到的基本上是您所说的“下策”,贵著何时出版,互动出版上还没相映的信息,不管如何一定拜读。您的第三方控件(一)我有收藏,但觉得有点遗憾的是重量级的控件介绍相应不多,我猜想和版权有关吧,但仍是国内介绍此方面的第一本书。祝愿多出好书,让我等收益。再次感谢
J jsongy Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-04 #67 这个问题我也这段时间也一直在考虑, 不过暂时还思路还很乱,希望大家多讨论讨论!
Y yyanghhong Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-05 #70 http://www.delphibbs.com/keylife/iblog_show.asp?xid=300
诸 诸葛白痴 Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-05 #73 讨论的中心实质应该是关于o/r mapping的应用吧,我也正在看这方面的资料,不过有些不明白
活 活化石 Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #74 yyanghhong你的文章,在读,在想.各位也不要闲着,谈谈呀
D delp Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #75 to 活化石 你问的问题是我刚刚完成的工作.... 我可以讲几条建议给你,你可以考虑 我想现在大家做面向对象的数据库开发,无非是为了程序更好的维护,层次更加清晰 但是大家容易犯的错误有一下几点,造成为了面向对象而面向对象 1、3层结构中业务(规则)层没有完全封装业务逻辑 2、UI层并不是完全依赖业务层工作,例如直接使用SQL语句 3、UI层包含了业务逻辑判断,例如数据合法性的检查 4、象 newdream 所说,善用 TClientDataSet (就像ADO.NET) 5、没有深入的分析UI层的本质,造成UI层的抽象无法下手 举例说明:如果是数据的操作无非是增删改,可以将最基础的Form抽象出来 Add Delete Update 对 人在昆明 的代码示例的说明,实际上你的业务对象应该从 TAddrBook 继承下来 你的业务UI应该从 TForm1 继承,如果仅仅照搬代码你会发现你仅仅完成了UI与业务 的分离,更本没有发挥面向对象的威力。 6、表与对象的区别不清晰,换个角度,UI层靠业务层提供的对象完成业务操作 那么业务对象实际上是通过表(看作是对象)完成业务对象至数据存储的转换 7、面向对象的设计本身就是艺术,没有绝对的正确,换个角度 建议 1-6 本身就是垃圾
to 活化石 你问的问题是我刚刚完成的工作.... 我可以讲几条建议给你,你可以考虑 我想现在大家做面向对象的数据库开发,无非是为了程序更好的维护,层次更加清晰 但是大家容易犯的错误有一下几点,造成为了面向对象而面向对象 1、3层结构中业务(规则)层没有完全封装业务逻辑 2、UI层并不是完全依赖业务层工作,例如直接使用SQL语句 3、UI层包含了业务逻辑判断,例如数据合法性的检查 4、象 newdream 所说,善用 TClientDataSet (就像ADO.NET) 5、没有深入的分析UI层的本质,造成UI层的抽象无法下手 举例说明:如果是数据的操作无非是增删改,可以将最基础的Form抽象出来 Add Delete Update 对 人在昆明 的代码示例的说明,实际上你的业务对象应该从 TAddrBook 继承下来 你的业务UI应该从 TForm1 继承,如果仅仅照搬代码你会发现你仅仅完成了UI与业务 的分离,更本没有发挥面向对象的威力。 6、表与对象的区别不清晰,换个角度,UI层靠业务层提供的对象完成业务操作 那么业务对象实际上是通过表(看作是对象)完成业务对象至数据存储的转换 7、面向对象的设计本身就是艺术,没有绝对的正确,换个角度 建议 1-6 本身就是垃圾
D delp Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #76 to lqy 我认为如果你能把 DataSet 看成业务对象的一个 Public 属性,UI(DBGrid Report...) 只是把这个属性Show给User,如果你深入的抽象UI层可以把Report等一起封装起来, 你就不会有这样的困惑了。
to lqy 我认为如果你能把 DataSet 看成业务对象的一个 Public 属性,UI(DBGrid Report...) 只是把这个属性Show给User,如果你深入的抽象UI层可以把Report等一起封装起来, 你就不会有这样的困惑了。
D delp Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #77 to wfzha, “这种类看不出有什么好处来,其实delphi的数据库组建的目的就是要把用户常用 的数据库操作用面向对象的方法封装起来,便于用户使用,你在此基础上再次封装, 有多大的意义呢?我觉得,在数据库应用程序中使用面向对象,重点应该放在对商务规则 以及一些vcl没有封装的数据库功能上。而不是在ado、bde、dbexpress上进行二次封装。” 耐心一点做一遍,你会发现有很多不同....
to wfzha, “这种类看不出有什么好处来,其实delphi的数据库组建的目的就是要把用户常用 的数据库操作用面向对象的方法封装起来,便于用户使用,你在此基础上再次封装, 有多大的意义呢?我觉得,在数据库应用程序中使用面向对象,重点应该放在对商务规则 以及一些vcl没有封装的数据库功能上。而不是在ado、bde、dbexpress上进行二次封装。” 耐心一点做一遍,你会发现有很多不同....
B barton Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #78 现在可以考虑改用Bold而不是自己写全部的代码了。 李维在《Borland传奇》一书的p113讲了Chuck曾经想改变VCL中Data Aware的体系,但没有 得到高层批准。现在的Bold简直把你能够想到的全想到了。你试用一下,很爽的。我曾经 在此命题下做过太多艰苦细致的工作。比起Bold来就太差太差了。不过,我自己的数据访 问框架却没有作废,可以结合Bold使用。
现在可以考虑改用Bold而不是自己写全部的代码了。 李维在《Borland传奇》一书的p113讲了Chuck曾经想改变VCL中Data Aware的体系,但没有 得到高层批准。现在的Bold简直把你能够想到的全想到了。你试用一下,很爽的。我曾经 在此命题下做过太多艰苦细致的工作。比起Bold来就太差太差了。不过,我自己的数据访 问框架却没有作废,可以结合Bold使用。
活 活化石 Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #79 大富翁是个好地方,可以碰上认真的人,用心的人,有才能的人.我经历的项目太少,行成不了总结性的东西,高手多提携吧.但愿能通过这个贴子,我和有相似想法地的富翁有质的飞跃,不枉各位费心的发言,还是那句话,请各位继续. 谢谢!
大富翁是个好地方,可以碰上认真的人,用心的人,有才能的人.我经历的项目太少,行成不了总结性的东西,高手多提携吧.但愿能通过这个贴子,我和有相似想法地的富翁有质的飞跃,不枉各位费心的发言,还是那句话,请各位继续. 谢谢!
L lqy Unregistered / Unconfirmed GUEST, unregistred user! 2003-07-07 #80 delp 先謝謝你,你的說法讓我受到很大的啟發 能否給一段範例代碼給我學習一下?