讨论,关于三层,希望DFW的前辈们能参与,给大家上上课 (大家畅所欲言吧) (200分)

W

wisenow

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在一直在思考三层的问题,对于很多人来说“三层”这个词从新鲜听到麻木,到底大家对三层理解了多少?为了了解三层,偶翻了大富翁的箱底,发现几篇很有意义的贴子:
标题 ID 作者
正方vs反方: 三层结构干吗用的? 425874 Another_eYes
关于业务规则放在哪一层上的问题? 418739 阿朱
"Delphi MIDAS 的重大BUG" 226555 李颖
用三层建立数据平台模型以 加快/简化 数据库应用程序开发之设想(妄想?)的探讨
316800 Another_eYes
现在在这里鲜有这样的讨论了,都是在问问题,唉... ...,希望这个贴子能被曾经在两三年前热情洋溢的讨论过这个主题的前辈看见,给大家传授一下这两年的关于三层的经验和教训,当然更希望新秀们能各抒己见,以促进交流。
下面是我在看贴子和思考时记录的几个问题,大家可以就此讨论,如果谁提出新的话题偶会依次添加
1 业务逻辑问题,到底放到AppServer还是Client?(焦点问题)
2 对于ClientDataset控件,到底用那些功能?还要Insert之类的吗?还是只用于显示数据?(可以和1看作是一个)
3 安全问题
4 数据统一的问题(当一个用户在操作某条记录时,还没有提交,而另一个用户在他提交前已经修改了当前记录)
5 大量数据传输的问题
关于这几个问题,我也有自己的看法,在讨论中我们一起侃(声明:偶不是高手,但也不是菜鸟)
分不是问题,只要内容有价值,偶会另开贴送分
 
正方vs反方: 三层结构干吗用的?
这个我昨天翻旧贴也看到,你说的这些,我也想知道,做个标记先
 
我的认识总结如下,可能浅显,请大家指正:
1。 核心数据层。---db server。
2。 中间逻辑层。-- server端。
3。 外围访问层。-- client端。
 
1 业务逻辑问题,到底放到AppServer还是Client
我的想法是数据更新逻辑,查询逻辑应当然在服务段,但是有些逻辑可以适当的放在
客户端
2 对于ClientDataset控件,到底用那些功能?还要Insert之类的吗?还是只用于显示数据?(可以和1看作是一个)
我是都用的,什么统计字段,查找字段,计算字段,Applyupdates
3 安全问题
不知道
4 数据统一的问题(当一个用户在操作某条记录时,还没有提交,而另一个用户在他提交前已经修改了当前记录)
Midas的ApplyUpdates的错误调和可以完美的解决
5 大量数据传输的问题
三层本来就应该避免大量数据传输,一定要的话,可以考虑用客户端线程的方式
 
的確現在這總有意義的討論很少間了.
樓主要想法不錯
 
我是一个初学者,看了大家的评论,觉得都挺有道理。
这里借wisenow兄的帖子,也提出几个相关的问题。希望wisenow兄见谅。
1.对于三层结构来说,如果我的c,s,database都在同一台机器上,在client端
的clientdataset执行sql语句,其速度与两层结构中,直接连接数据库后,执行sql语句的速度比,到底哪个更快呢?
2.用clientdataset直接写sql与用接口创建的函数操作数据库以及用datarequest方法传递数据,各有什么区别和优缺点?
谢谢!
 
嗯,人不多呀:(
关于业务逻辑:
记得最开始学习时,也就是跟着项目经理做三层的程序时,AppServer就是放了几个TADOQuery和Provider,然后大家开始写Client,现在回想起来,简直太幼稚了,这是一年前的事了。
个人认为业务逻辑应该放到AppServer中,这也是老外提出的三层的初衷的一个方面吧?我不能确定。业务逻辑放到AppServer的好处那几篇贴子的讨论中可以看到一些,我认为还有一个好处就是:客户端容易更换--比如,开始用Delphi写的Application的客户端,后来用户体户要求,要BS的,客户端用浏览器了,如果业务逻辑放在客户端,势必要重新写了,如果在应用服务器那就省了,直接调用AppServer中的业务逻辑就可以了,剩下的工作主要是怎么把数据呈现给用户了。基于此,我觉得ClientDataset只用于显示数据,而不是用它的添加等功能,可能有点偏颇?:)
 
我也做过一点东西,我的想法是APPSERVER应该做所有的数据处理与业务处理,CLIENT只做界面以及其他的非业务数据处理工作。但是再实际情况中,往往把所有的数据处理都写在了CLIENT端。APPSERVER只是作为数据中转了。
个人认为做三层很不容易,需要有一些有经验的程序员做APPSERVER的工作,最主要的还是设计方面的问题,设计不好,最后的三层还敢不上C/S。
 
同意tanhua的,我现在就是这种状况
 
同意tanhua的,所谓的三层最突出的特点就是增加了中间的业务逻辑层。
若没有规划好,还不如用传统的两层结构。
 
有经典的三层的例子吗?
两层的死锁问题,你们认为有好的解决办法吗?
三层中用ClientDaset后,可以较好解决呀.
大家发言
 
我们不比较三层与CS的优缺,我们的目标是:怎样做好三层!!!
 
想法不成熟,大家发表意见
安全问题:这个不得不考虑的问题,如果我的AppServer被人别人的程序调用了怎么办?其实这个应该不是太大的问题:AppServer的每一个功能都有一个验证参数,以区分敌我,这个参数的值由AppServer在用户登陆时生成,然后返还给Client,每次Client的请求都必须包含该参数,可能很多人都用过了。接下来的想法不知道大家想过没有?在数据库中建立一个表,记录已经登陆的Client,并记录每个Client的最后请求时间,而且可以设定一个类似浏览器Cookie的功能,当Client在一定时间内没有反应时,就把它fire掉。
 
数据访问层 == 业务逻辑 == UI层
 
搞清楚2层和3层的区别,就基本上明白了。
再次学习ing...
 
看来大家没有热情呀:-(
 
估计做过真正的,设计良好,性能也不错的三层程序的富翁是不是不太多?
 
各位可以看以下“刘艺的新书--Delphi面向对象编程思想 第八章”,主要说界面、业务逻辑的分离,可能对大家有帮助。
我只有该书前言和第八章的电子版,原书还没买到。谁要我可MAIL。
希望大家一起进步。
 
ntugn:
mail我一份点子版: qknife_lee@sina.com
 
好好,我也要哦,shib@efidic.com,谢谢
 

Similar threads

回复
0
查看
670
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部