怎样在DCOM里写多级对象?(100分)

  • 主题发起人 主题发起人 changbin
  • 开始时间 开始时间
to:杨先彬
我是要把业务逻辑都写在中间层。
客户端所做的每一件事,小到新增一个用户资料都是调用中间层的方法来实现。中间层的接口完善了以后
如果出现逻辑问题用户端可以说根本不动,将中间层那部份拿出来修改,再编辑。
就是说我客户端不知道表结构,只是显示数据,输入数据,和进行数据正确性校验
客户端掉用中间层的函数时只是传要更新或着插入的数据,sql都写在中间层
我现在想封装成的对象也是这个意思,就是比如入库对象,出库对象,设备检修对象等等
这样便于管理接口函数。
 
小弟现在的做法是如下,欢迎大伙讨论。
在中间层里分为 商业对象(处理业务逻辑)和数据对象(处理数据)。其中商业对象
是一个 MTS Object 。数据对象则是从 “MTS Data Module”中新建。无论是商业对象或者
数据对象都是相互独立的DLL(小弟的中间层是基于 MTS 的)。
划分数据对象,比如入库对象,出库对象,设备检修对象,就有三个独立的DLL:
入库数据对象.dll,出库数据对象.dll,设备检修数据对象.dll。
他们的接口都公布了最基本的数据操作功能:Insert、Update、Delete、GetDbByID......等等。
定义商业对象,比如定义一个叫仓库商业对象(仓库商业对象.dll)专门处理出库和入库
的各项操作。那么仓库商业对象则引入 入库数据对象_TLB.Pas 和 出库数据对象_TLB.Pas
并定义相应的接口和方法(对出入库操作的业务逻辑)。如果觉得仓库商业对象过于笼统和庞大,
也可以继续将商业对象细分下去。
 
to:杨先彬
你这样做,不是每个客户段必须有你的每个*.dll?
 
只要DCOMCONNECTION / SOCKETCONNECTION 里有商业对象的GUID 和 你 NT机器的名字就行
了。
 
to:杨先彬
如果你对于mdi窗体和多用户操作时
比如这样我一个窗体要调用一个对象,一个用户一下开了10几个窗体,几百个用户调用的多少?
那么DCOMConnection的servername的这些服务不是要起好多
虽然每个用户起的是不同的实例不互相影响,可是客户端与中间层的连接数也是不少了
可是我不知道大系统中这样应用服务器的负担和速度到底怎么样?
问杨先彬,你们公司系统做出来之后,超负载测试效果怎么?速度快吗?
 
To zqs10597249:
不明白为什么你的程序每个窗体都用一个DCOMCONNECTION / SOCKETCONNECTION。因为我的
这套程序一共有百来个模块,每个模块平均有三四个窗体,但是每个模块只有一个 DATAMODULE
DATAMODULE 里面只有一个 DCOMCONNECTION 。但是两三百个客户运行起来也很流畅,不过
如果数据搀杂了太多的图象信息的话,就难免有些慢了。
 
To zqs10597249:
不明白为什么你的程序每个窗体都用一个DCOMCONNECTION / SOCKETCONNECTION。因为我的
这套程序一共有百来个模块,每个模块平均有三四个窗体,但是每个模块只有一个 DATAMODULE
DATAMODULE 里面只有一个 DCOMCONNECTION 。但是两三百个客户运行起来也很流畅,不过
如果数据搀杂了太多的图象信息的话,就难免有些慢了。不过我没有使用 MDI 模式,但是
小弟觉得这个并不是主要问题吧。
 
To zqs10597249:
不明白为什么你的程序每个窗体都用一个DCOMCONNECTION / SOCKETCONNECTION。我现在做
这套程序一共有百来个模块,每个模块平均有三四个窗体,但是每个模块只有一个 DATAMODULE
DATAMODULE 里面只有一个 DCOMCONNECTION 。但是两三百个客户运行起来也很流畅,不过
如果数据搀杂了太多的图象信息的话,就难免有些慢了。我没有使用 MDI 模式,但是
小弟觉得这个并不是主要问题吧。
 
To zqs10597249:
不明白为什么你的程序每个窗体都用一个DCOMCONNECTION / SOCKETCONNECTION。我现在做
这套程序一共有百来个模块,每个模块平均有三四个窗体,但是所有模块也只是调用三四个
DCOMCONNECTION 而已。但是两三百个客户运行起来也很流畅,不过如果数据搀杂了太多的
图象数据的话,就难免有些慢了。我没有使用 MDI 模式,但小弟觉得这个并不是主要问题吧。
 
to:杨先彬
我明白了。
谢谢你了。因为是初次接触三层构架的系统。公司以前也是没有做过,所以定方案时比较
谨慎的,现在方案差不多了。
真的很感谢你的指导,以后也请你多多关照。
 
to:杨先彬先生:
我的问题http://www.delphibbs.com/delphibbs/dispq.asp?LID=877552
想结束了,你过来吧,小小300分不成敬意。
 
to 杨先彬
我也是在做一个三层的系统,可一直对这个中间层的封装比较头痛,我也是第一次做三层,
能不能也发了个demo给我?要不开一个帖子,你来拿分?万分感谢~~~~~!
我的E:hnlytjj@163.net或hnlytjj@263.net
 
我也是在做一个三层的系统,可一直对这个中间层的封装比较头痛,我也是第一次做三层,
能不能也发了个demo给我?要不开一个帖子,你来拿分?万分感谢~~~~~!
Email:fys@hmdadi.com或yousf@163.net
OICQ:52634398
 
多级对象在COM中是个高级话题,因为你必须为你的子类写一个专门的二进制代码,并定
义相应的类型库,以便操作系统能够Marshaling它,这完全是个操作系统级的问题。在
COM和客户端之间传递接口的时候,仅仅只传递了一个数据块,明确地讲,对接口只有一
个简单的VMT表,无法传递它的实现。当然,Delphi的IProvider/IStrings便外,因为
Borland专门为这些类做了Marshaling代码。
其实细想没有必要。只要有OleVariant来封装你的数据包,COM服务器和客户端间的接口
通过数据包传递方便又快捷。
 
我一贯讨厌MIDAS,因为它总是无法抛弃ClientDataset这个又臭又长的东东,于是我就
用自定义的WinSocket、自定义的DCOM。在遇到无数个死路后到网上来透透气。谁能告诉
我,我在中间层与客户端如果只用XML来传递命令和结果,犯得着使用ClientDataset吗?
处理每一个业务逻辑,都得同时在服务器和客户端考虑Provider和ClientDataset间的搭
配。烦不烦?
 
楼上的杨先彬,小弟刚用COM+开发,我用delphi制作com+组件,我在TMtsDataModule中放置了一个TADODataSet组件用于存取数据,
在COM+的方法中我动态存取CommandText与Parameters,因Parameters可以定义多个参数,可是我还弄不清楚在COM+中怎样将TADODataSet的
属性Parameters的TParameters类型做为参数进行传递???用Parameters* 或 Varinat * 类型???
请各位指教???最好有demo,先谢了!!!
 
to 杨先彬先生:
我也是第一次做三层,能不能也发了个demo给我?要不开一个帖子,你来拿分?万分感谢~~~~~!
我的E:fenghui7786@etang.com
 

Similar threads

后退
顶部