转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
《关于VisiBroker For Delphi的使用》(4)         ★★★★

《关于VisiBroker For Delphi的使用》(4)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:4300 更新时间:2009/4/23 18:44:55
 

《关于VisiBroker For Delphi的使用》


-CORBA技术实践(一)


宜昌市中心人民医院            赵普昉


                                          email: 3boy@sohu.com


 


4、实例设计与分析


上一次我想大家介绍了一个在CORBA中使用Pooler的小程序,这段代码中使用了较为高级的编写方法,在分析这个实例之前,我想和大家谈一点设计工具的应用,当然我会在本文的后续文章中深入探讨关于这些辅助手段的应用,在这里我只想简要的描述一下,为正真的工程项目中实现CORBA技术做好相应的知识储备。


前面我介绍了接口描述语言(IDL)的一些较为基础语言要素,如果只是在Delphi中开发实际的基于VisiBroker 的ORB多层应用体系的基本应用可以大胆的说已经够用了(如果有人反对我不介意),CORBA是一一个不断补充发展的标准,而且每种ORB产品又会对CORBA进行自己的描述,所以前面的一些IDL只是有一部分和OMG的定义有一定的区别,但是这不会影响到我们理解CORBA,当然必须说明的是前面的IDL描述都是完全符合VisiBroker的规范的。在C/S模式的程序设计之中,我们中绝大部分人是不会去考虑接口设计的,偶尔的出现也不会是采用我们开发多层系统这样的模式,所以刚刚接触多层系统的程序员要付出比C/S模式下设计大的多地精力来设计它,而且会拖延开发的周期,我一直在思考一个问题能不能避免这样的事情呢?或者说去谋求一个好的方法来改进我们的设计呢?在我看来拖延工期的问题主要表现在我们对于接口的确定上,接口的不确定因素体现在增加接口,修改接口,废止接口等等诸多问题上,设计接口我觉的类似与我们在设计ER图中的实体间的关系一样,如何平衡【服务――-中介―――客户】三者之间的关系是多层的首要问题,也是使得我们反复的罪魁祸首,在这里我想向大家推荐强大的Rational家族系列产品(Rose,SODA,ClearCase…..)我们可以使用这样的一些辅助工具来缩短我们的反复频率,在问题的分解中明确接口的设计方向与设计原则,对于拥有微软企业版开发套间的朋友可以利用Virtual Moduler工具来设计(这个工具是微软捆绑的ROSE产品,是一个标准的多层体系)在这里我不对如何使用他们来设计CORBA的接口进行描述,原因只有一个这是一个高级课题不属于<VisiBroker for Delphi>的范畴之中,我会在《面向CORBA的设计实践》中与大家共同探讨。


好了闲话就聊到这里,下面开始正体。


记得我在本文的第一小节中提到过CORBA DataMoudel Object,如果使用过这个对象的朋友一定清楚的了解单线程模式与多线程模式,也就是CORBA 3.3为大家提供了两种来至于TDataMoudel对象,进行的整体的封装,然而现在的CRB4.0为程序员提供了更大的灵活性


让我们自己来编写这样的两种不同的对象,显然后者可以让我们更广泛的扩展应用面,上次的例程就是一个多线程模式的例子,在讲解多线程模式之前我想还是让我们来看一下单线层模式的实例:


/*IDL*/


module TypeLibCRB


{


  interface InterfaceCRB;


 


 


  interface InterfaceCRB


  {


    any GetSQLData(in wstring Script, in boolean ExecutOrActive);


  };


 //定义一个发送客户执行的SQL,返回一个any类型


 


};


//XXX_Impl.pas


interface


 


uses


  SysUtils,


  CORBA,


  TypeLibCRB_i,


  TypeLibCRB_c


  ;


 


type


  TInterfaceCRB = class;


 


  TInterfaceCRB = class(TInterfacedObject, TypeLibCRB_i.InterfaceCRB)


  protected


   


  public


    constructor Create;


    function  GetSQLData ( const Script : WideString;


                           const ExecutOrActive : Boolean): Any;


  end;


 


 


implementation


 


uses UmCRBServer, UnCRBServer;


 


constructor TInterfaceCRB.Create;


begin


  inherited;


 


end;


 


function  TInterfaceCRB.GetSQLData ( const Script : WideString;


                                     const ExecutOrActive : Boolean): Any;


 


begin


  Form1.Memo1.Lines.Text:=Script;


  Result:=DataMCRB.GetData(Script,ExecutOrActive);


//调用TDataMoudel实例的方法请注意这个地方只有一个TDataMoudel实例


//下面的程序中会描述这个实例的方法定义


end;


 


 


initialization


 


 


end.


/********************/


/*动态创建数据实例的操作*/


unit UmCRBServer;


 


interface


 


uses


  SysUtils, Classes, DB, DBTables,Provider;


 


type


  TDataMCRB = class(TDataModule)


    DatabCRB: TDatabase;


    QueryCRB: TQuery;


    DataSetPCRB: TDataSetProvider;


  private


    { Private declarations }


  public


   function GetData(Script:String;ExecuteOrActicve:boolean):OleVariant;  { Public declarations }


  end;


 


var


  DataMCRB: TDataMCRB;


  function RunSQL(QueryX:TQuery;Script:String;ExecuteOrActive:boolean):boolean;


implementation


//这个代码中没有使用Session,也没有对事务进行控制,下一章节会给出一个使用Session的//例程,想一想这个方法的应用会有什么有点和缺点,如果愿意谈一谈請将您的想法发往我得//信箱


{$R *.dfm}


  function RunSQL(QueryX:TQuery;Script:String;ExecuteOrActive:boolean):boolean;


  begin


   Result:=false;


   with QueryX do


   begin


    if Active then Active:=false;


    SQL.Clear;


    SQL.Text:=Script;


    if ExecuteOrActive then


     ExecSQL else


     Active:=true;


     if not IsEmpty then


     Result:=true;


   end;


  end;


//这段代码我不讲解


{ TDataMCRB }


 


function TDataMCRB.GetData(Script: String;


  ExecuteOrActicve: boolean):OleVariant;


  var


   MyQry:TQuery;


   MyPrv:TDataSetProvider;


begin


 try


  MyQry:=TQuery.Create(self);


  MyPrv:=TDataSetProvider.Create(self);


  MyQry.DatabaseName:=DatabCRB.DatabaseName;


//注意如果使用TDataBase对象請将ShareHandle设为True;


  MyPrv.DataSet:=MyQry;


 if RunSQL(MyQry,Script,ExecuteOrActicve) then


  Result:=MyPrv.DATA;


 finally


  MyQry.Free;


  MyQry:=nil;


  MyPrv.Free;


  MyPrv:=nil;


 end;


end;


//动态创建数据集和数据提供者对象,在调用接口将数据返回给Client后释放动态创建的两//对象。这样可以避免在单线模式下客户端持久的拥有接口后的对象。


end.


/*****************************************/


/初始化CORBA实例,主单元


unit UnCRBServer;


 


interface


 


uses


  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,


  Corba, TypeLibCRB_c, TypeLibCRB_i, TypeLibCRB_impl, Type

[1] [2] [3]  下一页


[系统软件]InstallShield Express for delphi制作安装程序定…  [系统软件](转帖) 忘记登录密码的解决方案 for XP/2003/2000
[系统软件]交叉编译sshd for IXP425 ARM  Platform by MVL 3…  [Delphi程序]一个超链接Image控件!(For D3,D4,D5,D6)源代码
[Delphi程序]Five of the best tools for Delphi  [Delphi程序]《关于VisiBroker For Delphi的使用》(3)
[Delphi程序]《关于VisiBroker For Delphi的使用》(2)  [Delphi程序]《关于VisiBroker For Delphi的使用》
[Delphi程序]Delphi for .Net 编译器预览 - by John Kaster  [Delphi程序]编写一个单独的Web Service for Delphi7(步骤)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台