关于三层结构的企业逻辑怎么构建? 大家解答我之困惑。(100分)

  • 主题发起人 主题发起人 wuisland
  • 开始时间 开始时间
Sachow:
非常感谢解答我的困惑,基本解决了我的疑虑。
我想我的问题也来了。 :)
这只是一个简单的例子,当我们处理复杂单据时候,通常字段有很多。
不可能都建立参数,那么我想,是不是可以这样:
function int_fastcall AddLeaveRec(
Var Delta: OleVariant) //单据变更集
:OleVariant;
//单据处理结果
我想是可以的。以前我总是觉得自己的想法是不是错了呢?
或者有更好的方法。
经过大家讨论,我茅塞顿开啊。 谢谢你们。


 
To wuisland:可以,当数据较多时,用Variant来传递更方便。
(不过你的函数定义要再斟酌一下)
 
当数据较多时,构造Variant类型的数组来传递参数。
 
to Sachow,阿朱,感谢二位详细的回复!现在关于为什么用三层,怎么用三层都讨论的差不
多了,并且DCOM和Socket的分别,也在其它文章上多次谈到了!
我想,认真看过的朋友都比较想用DCOM,但由于设置麻烦,最终改用Socket。因此,我想
请问二位老兄,如果有DCOM开发经验,能否说说?
(可帮助加分!!!)
 
Todo
ll_paul:既然说到这份上,我就多说几句(这贴子如果100分就收场了,我觉得也不值)。
我近期实施了一个项目,服务器端用的是COM+(Windows 2000 Advanced Server主备,本来
想做成负荷分担,但由于Oracle 9i的原因没有搞成),出于效率、扩展性等方面的考虑,
没有用DCOM形态(EXE程序)的应用服务器,客户端用TDCOMConnection连接服务器。
使用TDCOMConnection连接服务器确实比较麻烦,主要麻烦在配置用户权限上面(对于这个问
题最简单的解决方法就是服务器与客户端建立相同的用户名和密码,客户端用此用户名和密码
登录),从安全性的角度来考虑,这样做的安全性是比较高的,非法的用户即使登录到网络,
也不能随意调用组件。Windows的权限机制还给TDCOMConnection的应用带来了另一个麻烦:
当我要把一个我的接口客户端程序放在另一台主上时就有麻烦了:该服务器是另一个网络上
的,是一个主域控制器,我这边的服务器也是主域控制器,这样设相同用户名和密码这一招
就不灵了,听说可以建立域信任关系来解决权限问题,我现在还没来得及试。使用TDCOMConnection
的另一个缺点其实也是一把双刃剑,它在阻止你不能透过代理服务器/防火墙来使用它时,同时
也提供给你了更高的安全性,这在系统需要在Internet中使用时尤为重要。
TSocketConnection用起来是很方便,它避开了恼人的Windows权限验证机制,并且可以在
Internet上透过代理服务器/防火墙使用。但是它的两个缺点使它实际上并不适合在Internet
上使用:第一,它使用Socket来连接服务器,从源代码上分析,scksrvr.exe(支持
TSocketConnection应用的服务器端)使用的就是TServerSocket。在Internet上使用时,网
络中断是家常便饭,客户端意外掉线时服务器端并不知道,还是继续打开着连接句柄,当先
前掉线的客户端再次连上来时,服务器又为它重新分配一个新的句柄,建立一个新的连接——
这样一来,很快服务器端就没有更多可以分配的Socket句柄了,这个资源一耗尽,它将不能
再为其它的客端提供服务。第二,由于没有了Windows的权限验证机制,任何知道服务器地
址和端口号(不知道端口号都关系不大)的客户端都能尝试着连上来,这包括了很多怀有恶
意的客户端,scksrvr对于这些恶意的客户端只能是待宰的羔羊。即使是在局域网中应用,
我们也经常听到听到有关对scksrvr稳定性的抱怨,由于我没有认真使用过TSocketConnection,
在这方面不能随便作出评价。
我的系统使用的是TDCOMConnection,那么怎样面对大量的客户端呢,如果每台客户端都要
为其设置一个密码,那岂不是麻烦,如果客户端改了密码,那岂不更麻烦?
对于这个问题,只能从业务上来管理一下:哪些用户需要高级、直观、交互性强的界面,
哪此用户只需要一个比较简单的输入、浏览界面……对于前者,我就提供给它Windows客户
端程序,我相信在一个大企业中,这部分用户只是少数的(至少对于我们的用户群是这样的);
对于后者,我提供给他们浏览器界面,B/S结构的程序就是好处。提供浏览器界面需要我做
相应的ASP程序来支持,“把整套程序改为ASP系统,工作量岂不是很大?!”,有人可能会
这样问,但情况并不是这样的,由于我把业务逻辑都写在组件里了,用户界面实际上只是一
个外壳,我可以用Dreamweaver来生成ASP的用户界面,再加入部分ASP代码(只用于调用组件
并根据调用结果提示一下用户)就行了,这样算下来改动量其实并不很大。想想看,如果在
规划系统时都把业务逻辑写到了客户端的话,要想把它改成B/S结构岂不歇菜?
 
我也想了解这方面的知识!
 
to Sachow,还是那句老话,我真的非常感谢老兄的热心、详细回复!
小弟,最近也有一个类似MIS的东东,本来打算用三层搞,但最终在比较DCOM和Socket时,
放弃了三层的思路,并最终回到老路。。。二层!!!
TDCOMConnection,我在查找资料和测试中,权限设置是非常麻烦,我几次把权限设置为最
低,也没有搞定。并且,如:在客户端也注册COM组件,设置同组件的用户名密码等,都
是非常麻烦的,更感觉,这对于客户在外地的(如我公司),真的不可能哦!!!!我想这也是
为什么很多DFW上朋友都说DCOM不能在互联网上使用的原因吧!
TSocketConnection,不用多说,简单明了,但不安全,稳定性,我感觉还可以,并且也有
很多朋友提意,设置超时时间,就可以了。在客户端代码上定间连接一下,也不算麻烦。
至于它的安全性,我个人感觉,就算用DCOM,我们也要自己处理权限,因为大多数据库程序
都是这样思路的。至少,我个人不会使用NT的安全机制(如:在NT上为每个客户建议用户)
最终,在测试和查找中,选定Socket做三层。但在进一步设计时,发现,如果完全按三层
思路开发,需要把很多操作“封装”,放在中间层,使开发变的麻烦,呵呵~(反正我目前
还不习惯!)当然,三层的好处,我们在此不说,看过几本书的人,都知道。
综上所述,最后,嗨。。。。又回到了二层...........
多说一句,其实,变向想想,ASP+COM组件,有时候,也是一个不错的方案!!!
另:真诚希望与Sachow兄交流,以后还请多多指点!也希望其它高手可以像Sachow学习,把
自己实际中的经验说出来,以提点我们这些小辈。(老兄要多少分?我开帖送分给你!)
再次感谢各位的回复!
 
对了,Sachow,把你的QQ号或MSN,EM给我吧!
EM:doll-paul@263.net
 
to_Sachow:看了您的文章。功力倍增。。。。
 
Sachow
我也倍感你的热心和功底。希望能多多向你学习。
我也可以要你的QQ吗? wuisland@163.com
谢谢!
 
Todo
ll_paul:是的,采用哪种技术要根据项目需求和自己的情况来权衡,如果两层能够解
决好的,就没有必要硬往三层上套。做一套三层系统为了充分考虑其扩展性,需要比两层多
做很多东西,并且需要较多的时间和技术储备,如果没有做好准备就草率上马的话,很可能
搞得自己很被动。
看你还略有点分,就向你索取200分吧,没有问题吧?
To 其它各位:我不经常上QQ,MSN也还没有搞好,可以先用邮件联系一下:
xychow@hotmail.com
近几天工作不太忙,我才有时间回这样的长贴,工作忙起来就没办法了,到时可不要怪我不
理你哦。
 
多人接受答案了。
 
to Sachow,你说的完全正确,做事情,不一定要循规蹈矩的。感谢你的认真回复!
我更想听听你在实际项目中的经验和分析,能否EM聊聊?(doll-paul@263.net)
希望以后还有机会交流。
至于分吗,我开帖送你。不过,我可没有你说的那么多分哦,哈哈!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1429276,不过,说到做到,送分
给你!!!
 

Similar threads

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