300分请大家谈谈TDataset-TFields-TField体系的运作机制。(300分)

  • 主题发起人 主题发起人 mywyn
  • 开始时间 开始时间
M

mywyn

Unregistered / Unconfirmed
GUEST, unregistred user!
我个人认为设计数据库程序最好能够做到界面,业务规则,数据库三者分离。
而要做到这一点最好放弃数据感知控件(也许高手另有办法)。而这是非常可惜的。

所以我认为改写或继承TDataset-TFields-TField体系应该可行。我们既可以加入业务规则,
又不用放弃数据感知控件,还可以防止数据感知控件的自发连接。

我之所以有各个想法是因为莫知兄的一个帖子,感兴趣的可以看一下
http://www.delphibbs.com/delphibbs/dispq.asp?LID=946305
可惜这方面的高手barton兄到现在还没现身。

我的想法还很不成熟,也许根本不可行。欢迎各位富翁斧正。
 
只能关注了.
等待高手
 
其实MIDAS的结构就已经达到了你说的目的
客户端用TClientDataSet
中间层是业务规则层,只有符合你的规则的数据才能进入数据库
而后端则是数据库
从逻辑上三者是分得很清晰的
 
用MIDAS做确实是分离了界面,不过业务规则和数据库操作还是放在了一起。不能说
把数据库放在另一个服务器上就叫分离。焦点是怎样在程序设计上分离业务规则和数据库操作。
 
中间加个com不就可以了
 
>>不过业务规则和数据库操作还是放在了一起
就要看你“怎样在程序设计上分离业务规则和数据库操作”了。

>>用MIDAS做确实是分离了界面
既然已经分离了界面,剩下的不就好解决了?
界面,业务规则,数据库三者分离的难点在哪? 不就是在于界面与业务规则、界面与数据库
之间的结合太紧密吗?
 
如果按一个软件一个设计的话,这确实是比较好解决。不过我希望有一种通用的东西。
比如,通过事件、属性我们就可以方便的修改业务规则。过于复杂的也可以使用继承机制
达到目地。

另外,如果软件是c/s建构或只使用本地数据库,MIDAS的做法就行不通了。
所以我提出是否可以改写TDataset-TFields-TField体系,这比较具有通用性。
 
我觉得如果只是对c/s或local来说,改写TDataset并没有很大帮助呀。只要仍然使用类似Dataset
的架构,至多也只能使界面对字段的改动独立。但对表结构的变动,就无能为力了。因为以
表为基础的dataset,是不能提供比表更高级的通用性的。因此我觉得治本的办法还是要使用
domain model(即业务对象完全面向业务,独立于数据库)。但这样也就意味着不能使用面
向DataSet的数据感知控件了。
 
我有了一个发现(也许大家早就发现了),
我在一个form上放了TDBGrid, TDataSource;TClientDataSet TDataSetProvider TADOTable;
TDataSetProvider.dataset<-TADOTable
TClientDataSet.ProviderName<-TDataSetProvider
TClientDataSet.RemoteServer为空
TDataSource.dataset<-TClientDataSet

这样设定后居然可以正常的浏览和修改。如果这是Delphi设计的必然,那这实在是太
令人兴奋了。这样本地数据库程序和c/s建构的程序从逻辑上就可以具有三层的架构。将来
如果要改成真正的三层也是前所未有的方便。xianjun兄,给兄弟论证一下吧。

如果论证属实,那么,问题的焦点就转换成怎样更好的分离业务规则和数据库。这
应该是kidneyball的强项。
TDataset-TFields-TField体系就不改了[:D]



 
先做个记号,以后再来。
 
此种方法的确可以,bde似乎也可以!但是还没有经过验证!

是不是还有不可逾越的障碍哪!?
 
BDE 可以啊,我一般用来把数据库的数据备份到本机的 XML 文件中,用的就是 BDE,然后
TDataSetProvider.dataset<-TTable
TClientDataSet.ProviderName<-TDataSetProvider
TClientDataSet.RemoteServer为空
将 TClientDataSet 中的数据集另存为 XML 文件

 
这样当然可以,本地provider在midas的帮助中有说明的。我们都用这种结构作了
两个项目了。与是ado和bde并没有关系,任何数据连接都可以。应为cds只是访问
dsp,而dsp一段当然数据连接随便用。晕ing........

号外:谁说用了业务对象就不能用数据感应控件?学习一下bold for delphi,在加
一层把对象转给界面层的特制对象数据集不就可以了?大伙这一段好像讨论这个话
题特热烈,bold已经多做好了,还讨论怎么实现?还是多讨论怎么应用吧。borland
的delphi7架构版与企业版唯一的差别就是多了一个bold。如果bold的功能不是具有
特别重大的意义,能让borland专门为它分一个delphi的版本?
 
逛了一下盗版市场也没找到架构版,不能感受bold for delphi,郁闷中
不过看到provider可以用于本地,又感到十分欣喜。

感谢京工之鸟的回答。
 
京工之鸟:
好久不见! 能不能给我们讲讲Bold for delphi是怎么一回事?
我装上去了,但没弄明白是怎么回事。 一大堆英文看起来都头晕。[:(]
简要地说说?[:)]

>>本地数据库程序和c/s建构的程序从逻辑上就可以具有三层的架构
这个肯定是可行的。
但很少人这么做, 因为C/S与多层各有各的优缺点
小型系统的话,用C/S也能工作得非常好了。所以你以三层的架构来开发C/S程序,完全是
没有必要。 毕竟三层结构的开发要考虑的东西比C/S要多一点。
 
在GOOGLE上找了一下,中文资料基本没有? [:(!]
只找到一个相关的讨论: http://www.umlchina.com/best/g21/g1332.htm#1124917
不会要我去看英文吧?
另外,自然而然地,它让我想到了ModalMaker,不知两者间有什么联系及区别?
 
就我所知目前bold for delphi没有也不会有任何中文的资料。不用再花大力气去找中文资料了。
bold是一套面向对象的应用框架,通过他,你可以使用delphi建立完全的面向对象的体系。你可
以在rose、modelmaker或其他支持uml和ocl的设计工具(或直接在bold内置的设计器中设计)中
设计及建立你的应用程序的模型。然后通过模型,可以直接生成用delphi代码描述的应用程序框
架。这样可以大大的缩短项目开发从分析阶段过渡到设计阶段的时间,提高开发速度。并且以模
型来管理系统框架将使你的系统更加的坚固和可维护。

bold的架构和具体的使用范例在它的帮助文件中都有。但使用bold,首先你必须掌握和精通uml、
ocl、oop和delphi。如果没有这些基础知识,有帮助和范例你也看不懂,如果已经掌握这些,不
用中文帮助看范例和勉强看看英文帮助也能凑合学会。

关于modelmaker和bold的区别。就像问鸭子和兔子有什么区别一样?:)鸭子和兔子的共同点是
都是动物,modelmaker和bold得共同点是他们都是delphi的辅助开发工具。:)

modelmaker是一套建模工具,提供对uml、模式等的支持。能直接生成delphi代码,但它仅仅只是
帮你建模,并不能做你没有作的事情。而bold帮你做好了一整套框架基础类。当然,你可以用modelmaker
来建bold的模型。

如果你要真正理解bold的作用,首先,请抛开用delphi写数据库程序的固有思路来理解。要是你能
在完全不用delphi的数据感应控件、数据集体系的情况下用面向对象的思路来写一套数据库应用,
你要怎么设计怎么实现?其中会遇到什么困难?有什么是可以抽出来成为体系和框架以便下一次项目
时可以重用的?想清楚这些问题,然后,ok,在bold中找找:)它帮你实现的就是这些问题中的某一
大块(注意不是全部):)

 
bold for delphi有30天试用版。如果在它的网站注册下载试用版,到了30天以后,他
们会给你发电子邮件问你使用感受和建议,并问你要不要延长试用时间:)

如果仅仅是学习的话,你可以有足够长的试用时间:)
 
想更上一层楼,就请暂时忘记数据库吧。绝大部分人的设计都是围绕着数据库展开的,
却把业务对象忘得一干二净。

DELPHI里面的那些DATASET与DATAAWARE控件害了一批又一批的贪小便宜的人。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部