李维的Borland传奇Page 86 中说的“SocketConnenttion”未达到真正应用水准(100分)

  • 主题发起人 主题发起人 codee
  • 开始时间 开始时间
DCOM和TDComconnection不一样,如果你换成TDComconnection就不一定行了,我遇到过这样
的情况,一开始怀疑DCOM设置的问题,怎么也弄不出来,后来自己写了个DCOM一试,就行了
 
我指的就是这个,直接使用COM/DCOM的调用是最可靠的,TDCOMConnection或TSocketConnection都是通过AppServer接口进行调用的,遇到复杂情况时也不灵光,TWebConnection的问题更多,我遇到的最恼人的一个是采用TWebConnection连接时,服务器竟然不能被自动激活,估计是httpsrvr.dll的问题。
 
不用TDCOMConnection直接用DCOM不是太痛苦了么,那么多东西都要自己实现......
 
我只用TDCOMConnection取数据,读出来的数据用各种Grid控件显示,但也只设成只读的。需要进行数据更新的地方都按业务逻辑划分后写在一个个的对象方法里。这是一个设计模式的问题,如果按照通常的MIDAS的设计模式,人们很容易走入将业务逻辑混在客户端界面的误区里,以做两层开发的方式来做三层开发。这样,就根本利用不到多层分布式组件结构中代码复用的优点。将业务逻辑进行对象方法级的封装,虽然前期的工作量会加大(可能会增加30%以上吧),但后期在进行维护、扩充时的工作量就会小很多,有利于控制系统总支出。
 
其实我的用法与你一样,但我用TSocketConnection因为它更简洁,没有多余的东西
特别是设置方便,其实,我觉得Midas用数据控件管理数据实在是画蛇添足。
 
其实,数据敏感控件是好东东,但必须做到界面和业务逻辑分离
 
业务逻辑一般在中间层,如果用数据控件更新,逻辑放在客户端,显得分散,不利于维护
不爽!如果不用数据控件更新,数据控件的作用还剩多少呢?每次更新时,从数据敏感控件
中读数据不是太麻烦吗?
 
DCOM/DCOMConnection无法实现回调,除非将每一个客户端都配置成DCOMServer。但
SocketConnection/WebConnection能够很方便地实现。这样在服务器向客户端主动“推数
据”时非常方便。当有用户更新数据时,服务器可以主动将变化的数据通过回调发送给其
它客户端。
不过,我建议不要使用SocketServer,最好将SocketServer的功能嵌套到AppServer中,
实现这些功能的时候也不要用Delphi提供的控件,更不要用Indy(这是Delphi以来最大的
垃圾),而是使用Socket API,并且采用比较好的IO模型,例如重叠端口/完成端口。如果
并发较少,当然用scktcomp/SConnect提供的Socket控件也可以。
无论如何没有说DCOMConnection比SocketConnection更稳定的说法。
 
非常同意wfzha的说法。所以大家不要总是陷入李维的说法中。李维的说法总是基于
Dataware模式的。如果服务器与客户端并不遵守MIDAS的数据格式和连接方式,也就不需要
局限于什么线程模式了,AppServer不需要为某个客户建立任何线程或是进程。
 
不过我觉得也不要走极端,其实平心而论,MIDAS还是不错的,短小精悍,灵活性也不错
除非必要,用用也不错。李维的做法是有点极端了,有时感觉就像是用本地和c/s的方式
作三层,他的技巧和思维方式值得学习,但方法......
另外,我觉得MIDAS的线程解决的还是不错的。当然一定要自己写的话也不错,不是人人都
有这种机会的!
 
*由于证据不足,撤消对TSocketConnection关于稳定性的指控(先前打错字了)*
 
TSocketConnection仍不适合在Internet上使用,原因仍是安全性问题。
对TSocketConnection,我们能采用的安全方案主要就是采用一个加密组件作为其Interceptor,这涉及两个问题:1、采用加密组件对所有传输的数据进行加密,会导致服务器运行开销的增加和系统性能的降低(影响幅度与所采用的加密算法有关)。2、该应用采用哪种加密算法,密钥如何管理?
考虑到应用一个可靠的加密方案,必须采取主流的应用加密技术,随之而来的问题就是密钥的管理,这恐怕比配置DCOM还要麻烦。为什么不能采用自己的加密算法?这是每一本关于安全技术的书籍都给读者提出的忠告,不要以为自己编写的加密算法会比由操作系统提供的更可靠,除非你是一个关于加密算法的顶尖专家。
 
关于SOCKETCONNECTION何DCOMCONNECTION我总结点个人看法,
1.MIDAS的核心是MIDAS.DLL,其最大的特点就是实现了对DATASET的封装,也是其最大的好处,所以如果不使用数据集就是买椟还珠了,当然使用DCOM做协议也可以,不过没什么必要,个人觉得不如直接用SOCKET做,加密用现成代码对数据加密就可以了.DCOM和SOCKET包括CORBA都只利用了里面的传输层而已.任何三层结构最基本的也就是数据封装/传输/事务控制
2.用不用数据集控件就各取所需了,我的建议是用,因其是对数据普通操作的抽象,你不用,最后还是得写,而且大都重复.
3.INTERNET上的应用不宜用MIDAS,原因:MIDAS里多余的数据太多,不是原生的数据封装,大家以后可以考虑使用我写的一套组件,不过不提供原码的,该套组件可以自己写协议,服务器间可以方便的通讯,也可以传递数据集(TDATASET的子类),还可以自由定义使用TCP/UDP(即协议无关,你甚至可以用自己的传输层).
4.局域网的三层个人建议使用ASTA做,很方便,也很容易从MIDAS移植,包括协议定义,回调,广播等都有现成的东西,只是里面的数据集的封装跟MIDAS一样,冗余太多,导致数据量大,传输速度慢
 
哪有李维的Borland传奇下,要中文的
 
多人接受答案了。
 
后退
顶部