原Borland Midas 技术的几点不足

现在说起多层结构应用,那基本就是dotNet和Java的天下,Midas技术只能是黯然失色.但如果以面向中小型数据库应用来说,Midas 从各方面(成本,技术风险)综合起来还是一个非常优秀的选择.但Midas 的确是在几方面不伦不类,这也是Midas不能广泛应用的原因之一.Midas 规范中的标准接口函数    function  AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant;                              MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; safecall;    function  AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer;                            Options: Integer; const CommandText: WideString;                            var Params: OleVariant; var OwnerData: OleVariant): OleVariant; safecall;    function  AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant; safecall;    function  AS_GetProviderNames: OleVariant; safecall;    function  AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; safecall;    function  AS_RowRequest(const ProviderName: WideString; Row: OleVariant; RequestType: Integer;                            var OwnerData: OleVariant): OleVariant; safecall;    procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString;                         var Params: OleVariant; var OwnerData: OleVariant); safecall;1.Midas 中的网络问题,DCOM就不说了.相信现在大部分都是用Socket,关于Midas提供的ScktSrvr.EXE,从Delphi 5到现在我还是不理解,以Borland的技术力量,怎么就提供了一个鸡肋的工具.后续版本也并没有做出更好的调整,着实让人郁闷.也许就如当年Borland没看好DBMS市场一样,多层面向互联网数据库应用Borland也并没有看好.2.Midas 中的TClientDataSet,这是Midas技术中最精华的(从Provider.pas 单元我们可以侧面更深一层来理解Midas 中内存表的工作机制),呵呵.Midas 用一种最直接的方式来实现了在多层结构中数据的零时存储管理.还有就是TClientDataSet 中的Delta,其基于日志方式来记录数据的变动,有利于减少网络传输中的数据包大小.最不理解的就是为什么TClientDataSet不直接实现数据分页(这点和服务对象无状态有非常大关系),反而留给开发人员来自己实现(毕竟Borland不是做消费型技术产品,理解).3.在 Midas 规范下,实现服务对象大部分采用TRemoteDataModule,当然,我们也可以自己实现由Midas 定义的标准函数.事实,TRemoteDataModule是直接调用相应的TDataSetProvider组件的函数来实现,自身并没有直接来实现.TDataSetProvider组件主要负责的就是与数据源的代理作用,包含数据查询和提交.也正是TDataSetProvider才导致Midas 不直接支持数据分页和服务对象无状态化这两项在多层面向互联网数据库应用中最重要的两项技术要求.还有点就是TDataSetProvider在ApplyUpdates过程中,竟不支持对记录行的触发事件,我们知道,实际应用中,有很多业务逻辑就是以触发器来实现,在三层结构下,业务逻辑的封装和部署应该是在应用层,没有了应用层提供的触发机制,真是莫大的遗憾.4.服务对象封装,有两种方式,COM(DLL,EXE),呵,还有一种,就是把所有的服务对象全部编译打包到主应用EXE中.采用COM来封装,主要目的就是为了分布式对象这个技术点,从而实现相关的负载平衡等.全部编译打包在主EXE文件中,就不多讨论,纯粹就是偷工减料,其后果不言而知.最不方便的就是COM在Delphi环境下的调试跟踪,还有就是COM组件的接口改动与发布,其他的都还好.呵呵!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值