delphi面向对象及数据库(300分)

  • 主题发起人 活化石
  • 开始时间

活化石

Unregistered / Unconfirmed
GUEST, unregistred user!
这样,那位提供上传空间信息,一经“人在昆明”采用,我给提供信息者出分(100给我这个穷人留个活口).
人在昆明如果你方便提供的话就请出手,但不强求,怎么说都是朋友。
 
P

PangPang

Unregistered / Unconfirmed
GUEST, unregistred user!
我是个快毕业的学生,不久前用delphi与SQL SEVER搞了个C/S结构的应用程序。而且学校给发奖金。我却围着这个问题搞了一个多星期。还是没多大进展。希望有哪位高手细述经典。
 
N

newdream

Unregistered / Unconfirmed
GUEST, unregistred user!
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!
谢谢,刘先生。我看到的一些文章谈到的基本上是您所说的“下策”,贵著何时出版,互动出版上还没相映的信息,不管如何一定拜读。您的第三方控件(一)我有收藏,但觉得有点遗憾的是重量级的控件介绍相应不多,我猜想和版权有关吧,但仍是国内介绍此方面的第一本书。祝愿多出好书,让我等收益。再次感谢
 
D

Dp521

Unregistered / Unconfirmed
GUEST, unregistred user!
学习,帮你UP!
 
J

jsongy

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题我也这段时间也一直在考虑, 不过暂时还思路还很乱,希望大家多讨论讨论!
 
X

xp2000

Unregistered / Unconfirmed
GUEST, unregistred user!
学习,帮你UP!
 

魔鬼大师

Unregistered / Unconfirmed
GUEST, unregistred user!
Y

yyanghhong

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/keylife/iblog_show.asp?xid=300
 
J

jmlei

Unregistered / Unconfirmed
GUEST, unregistred user!
学习一下[:)][:D][8D][:(][:(!][^][?]
 

老人家

Unregistered / Unconfirmed
GUEST, unregistred user!
最主要的是要从事务活动中抽取对象
 

诸葛白痴

Unregistered / Unconfirmed
GUEST, unregistred user!
讨论的中心实质应该是关于o/r mapping的应用吧,我也正在看这方面的资料,不过有些不明白
 

活化石

Unregistered / Unconfirmed
GUEST, unregistred user!
yyanghhong你的文章,在读,在想.各位也不要闲着,谈谈呀
 
D

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
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!
to lqy
我认为如果你能把 DataSet 看成业务对象的一个 Public 属性,UI(DBGrid Report...)
只是把这个属性Show给User,如果你深入的抽象UI层可以把Report等一起封装起来,
你就不会有这样的困惑了。
 
D

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
to wfzha,
“这种类看不出有什么好处来,其实delphi的数据库组建的目的就是要把用户常用
的数据库操作用面向对象的方法封装起来,便于用户使用,你在此基础上再次封装,
有多大的意义呢?我觉得,在数据库应用程序中使用面向对象,重点应该放在对商务规则
以及一些vcl没有封装的数据库功能上。而不是在ado、bde、dbexpress上进行二次封装。”
耐心一点做一遍,你会发现有很多不同....
 
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
现在可以考虑改用Bold而不是自己写全部的代码了。
李维在《Borland传奇》一书的p113讲了Chuck曾经想改变VCL中Data Aware的体系,但没有
得到高层批准。现在的Bold简直把你能够想到的全想到了。你试用一下,很爽的。我曾经
在此命题下做过太多艰苦细致的工作。比起Bold来就太差太差了。不过,我自己的数据访
问框架却没有作废,可以结合Bold使用。
 

活化石

Unregistered / Unconfirmed
GUEST, unregistred user!
大富翁是个好地方,可以碰上认真的人,用心的人,有才能的人.我经历的项目太少,行成不了总结性的东西,高手多提携吧.但愿能通过这个贴子,我和有相似想法地的富翁有质的飞跃,不枉各位费心的发言,还是那句话,请各位继续.
谢谢!
 
L

lqy

Unregistered / Unconfirmed
GUEST, unregistred user!
delp 先謝謝你,你的說法讓我受到很大的啟發
能否給一段範例代碼給我學習一下?

 
顶部