Delphi的最初的设计者们对现代OOP理论的贡献是巨大的。但是,在数据库编程方面,有几个问题,我四五年都不得起解:1、TDataSource的作用和必要性到底何在?许多第三方的GUI构件,包括Delphi自身带来的TDBChart、QuickReport等,为什么都直接用TDataSet? Delphi官方资料没有给出任何让人感觉TDataSource有真正用处的说明。2、DataModule除了放象TDatabase/TADOConnection之类的连接构件以外,到底有什么用途?如果真的按Borland所倡导的,把一切DataSet都放这里,一切DataSet的事件处理代码也都放这里,达到所谓的“业务规则和界面的分离“,试想这样的分离的后果:
1)所有的数据访问窗口,都要和这个DataModule关联,OOP的封装性将被严重破坏,这样的窗口代码重用性何在?例如一个要设计一个通用的TFrame,实现一个基于数据库的TreeView,那么,所有使用这个Frame的Project都要包含一个名字相同、而且放置了同样、同名的DataSet和TDatabase(或其他连接构件),也就是说,你的Frame不可能做到“接口”和“实现”的分离。更严重的是,这样的Frame还对其使用者选择什么数据库访问方案施加了强制性。
2)切DataSet的事件处理代码也都放这里,达到所谓的“业务规则和界面的分离”:在实际的编程中,DataSet的Event许多都和界面有关,这样DataModule就不得不引用所有的引用它的Form。
3)大型项目,数以百计的DataSet/DataSource都一锅粥放在这里,你的代码甚至DataModule的设计期外观的可读性何在?本人粗浅意见:这些东西,都折射出Borland在探索分层计算(也就是“业务规则和界面的分离”)这个现代架构理念方面所走过的歧途。尤其是DataModule,干扰了许多人的正确思路,至今仍有数不清的Delphi新手试图在把Data Acess构件和“业务规则”封装在里面!所言乃一己浅薄见解,欢迎方家斧正!
批评意见请致[email protected]
1)所有的数据访问窗口,都要和这个DataModule关联,OOP的封装性将被严重破坏,这样的窗口代码重用性何在?例如一个要设计一个通用的TFrame,实现一个基于数据库的TreeView,那么,所有使用这个Frame的Project都要包含一个名字相同、而且放置了同样、同名的DataSet和TDatabase(或其他连接构件),也就是说,你的Frame不可能做到“接口”和“实现”的分离。更严重的是,这样的Frame还对其使用者选择什么数据库访问方案施加了强制性。
2)切DataSet的事件处理代码也都放这里,达到所谓的“业务规则和界面的分离”:在实际的编程中,DataSet的Event许多都和界面有关,这样DataModule就不得不引用所有的引用它的Form。
3)大型项目,数以百计的DataSet/DataSource都一锅粥放在这里,你的代码甚至DataModule的设计期外观的可读性何在?本人粗浅意见:这些东西,都折射出Borland在探索分层计算(也就是“业务规则和界面的分离”)这个现代架构理念方面所走过的歧途。尤其是DataModule,干扰了许多人的正确思路,至今仍有数不清的Delphi新手试图在把Data Acess构件和“业务规则”封装在里面!所言乃一己浅薄见解,欢迎方家斧正!
批评意见请致[email protected]
解决方案 »
- 如何取得ColorDialog返回的值
- 在Delphi中能像在VB中那样建立控件数据吗?
- 文件广播??实现方法??
- 请教如何禁止一个外部进程连接80端口
- 菜鸟,请教各位高手,帮忙看看这段程序,不够再加~~~~~~~感激!!
- 类没有创建但里头却有数据,不止何解?
- 如何让dbgrid只支持更新而不能插入数据???
- 请bobo2856(bobo)和12rain(中雨~百年孤独)来领分
- 在ServerSocket和ClientSocket中能否获得某个会话Socket的Server端和Client端的Port值?
- 高分求ado连接oracle查询的代码
- 用WebBrowser时按回车键但Submit按钮不响应------紧急求助
- 急!bde问题!
2)TDataModule是轻量级的Form,主要是节省资源,也可以用TForm的。它的设计就是遵从数据与显示分离。实际上,要做到数据和显示分离并不是一件非常困难的事情,只要设计的好,数据和显示是完全可以分离的,当然不如混在一起方便。
关DataModule的用处:我一般是放连接与少量使用量较大的记录集。
Tdatasource干了什么,你可以用debug来看看它到底干了什么。请不要随便提出质疑。就像对一些现在看起来毫无用处的行业提出质疑一样。比如当初人们对华罗庚教授他们的工作一样。它们真得毫无用处吗?深入了解之后再说话,在评论。如果你对TDataSource有什么质疑,请提出比它更好的方案。我们拭目以待!
我们拭目以待!
===================================================
看看原生ADO与其编程语言的方案吧!
动态建立对像也不是什么高深的东东。
楼顶的。我很喜欢这些话,孟岩大哥总结得很好。我送给你。请你明白这些话的含义。特别是第五条。嗬嗬,还好,我没有学会basic,包括visual basic。哈哈。其实第五条只是这位大师针对当时也就是几十年前乱用goto来说的。没有恶意。请你保持谦卑,不要尝试批判什么,等你明白了一些道理,你会知道你的话很幼稚。
很不同意你的这句话:“他们吃的盐比我们吃的米还要多,他们开发的代码比我们多百倍。”肯定不对,他们吃得盐肯定没有我们吃的米多,他们开发的代码,肯定不止别我们多百倍。borland的的确都是牛人。
楼上各位的回复都蛮有意思的。
Borland真是软件界的一个“传奇”啊
不过Borland牛人很多,M$却是最会挖别人的牛人的公司
2、“Tdatasource干了什么,你可以用debug来看看它到底干了什么。”请回答:你用过DEGUB看过JVM到底干的什么吗?你用过DEBUG看过CLR到底干了什么吗?
3、世界其实比聪明的年轻人们想象的大。TO 其他人
本不想作感情化的评论。本人保证:最后一次!