公司以前用COM+做过工厂的生产管理和财务管理,被设计成两个COM+应用,成为两个独立的子系统。也就是说,在客户端需要安装两个COM+的proxy(代理接口)以及相应的应用程序。现在规模扩大了,要加上设备管理和采购管理。我现在很头疼,因为原来的设计师不在了,我觉得照这样子下去是很愚蠢的:再设计两个子系统,那么在系统的布署和维护上将非常麻烦,你得不停地从服务器端导出各个应用的代理接口,然后在客户端更新。现在的规模:在服务器端每个应用都包含100个组件左右,导出的接口文件大约有5M多,呜呼!
请教各位高人,使用COM+架构一个大系统真的这么麻烦吗?有什么好的架构办法?
千万别告诉我不用COM+,转到稻奈特,老板会掐死我的!
兄弟刚刚进坛子,只能给100分,多谢了!!!

解决方案 »

  1.   

    @#$%^&*
    看不懂?再次请教!
      

  2.   

    做成四层的程序
    数据库--〉com+---〉中间层----〉客户端这样你的客户端不需要安装什么com+代理了,只需要在一台服务器上安装com+。
    不过你的系统要大改了
      

  3.   

    to theone_jxm():
    ---做成四层的程序
    ---数据库--〉com+---〉中间层----〉客户端
    ---这样你的客户端不需要安装什么com+代理了,只需要在一台服务器上安装com+。
    ---不过你的系统要大改了老兄的意思俺不大明白,俺的COM+组件主要是提供共用的功能,还有些组件是封装业务逻辑的;可是我的客户端要访问COM+组件,怎么办?难道客户端用IE?
    兄弟比较愚蠢,请指教。
      

  4.   

    所谓的代理,可以把许多COM+封装成一个COM+组件来输出接口,那么Client端只需要导出一个
      

  5.   

    to stella53(慕蓉云风):
    假设我有APP01和APP02两个COM+应用,如何导出一个???
    恭候。
      

  6.   

    你的意思是Client端的应用还很多吗?
      

  7.   

    对于某个客户来说,Client端应该来说是相对统一的东东你的意思是某个企业的项目,你还给这个企业的每个部门做一个单独的APP?
      

  8.   

    to stella53(慕蓉云风) :
    是这样的,目前的模式是每个子系统做成一个EXE文件,对应的在服务器端有多个COM+应用,每个应用里边有若干组件。我觉得异常麻烦。
    如问题内容所述,如何在COM+的环境下去构架一个大的系统?请指点一二。感谢。
      

  9.   

    服务端的每个应用都是一个不同的Package???
    而Client每个子系统的EXE就对应于一个服务端的PackageCOM+应用?
      

  10.   

    用webservice作为你的中间层,封装com+函数。客户端掉用你的webservice函数执行com+.
    你的客户端可以是exe程序,也可以是.net的winformfunction TIsapiserver.InsertBlob(var Data: string; userId,
      TableID: string): integer;//这是webservice的
    var
      obj: variant;begin
    // procedure TMtsReport.InsertBlob(var Data: OleVariant; const table_id,
    //  user_id: WideString);//这是com+的
      coinitialize(nil);
      try
        try
          obj := createoleobject('pmts.mtsreport');
          result := obj.InsertBlob(Data, TableID, userId);
             //s_ok;
        except
          result := -1;
        end;
      finally
        CoUninitialize;
      end;
    end;客户端
      try
        try
          ret := IIsapiserver1.GetIIsapiserver(false,
            'http://' + serverIP + strend).InsertBlob(data, edit1.Text, edit1.Text);
        except
          showmessage('异常:' + inttostr(ret));
          raise;
        end;
      

  11.   

    to theone_jxm() :
    多谢,可是这样子动作太大了,老板不会答应。
      

  12.   

    theone_jxm言之成理,WEBService代理封装很不错。
      

  13.   

    to stella53(慕蓉云风):
    ---服务端的每个应用都是一个不同的Package???
    是的,英文叫Application;
    ---而Client每个子系统的EXE就对应于一个服务端的PackageCOM+应用?
    差不多是这样子。
    据我推测,当初这样设计可能是由于系统规模较小,但是现在把我害惨了。
      

  14.   

    to stella53(慕蓉云风):
    如果要改,有什么好办法吗?
    请不吝赐教。
      

  15.   

    呵呵我可以告诉你一个实现的大致方案,但对于你现有的系统来说,也许等于代码重组。由于商业问题,我就说一个大概,还请高手们多多指教。1、剖离业务逻辑,实现一个较低层的COM+ 平台
    即与业务逻辑无关的类API式的组件,把比如说数据访问等做成组件
    这一层基本上会有几个组件(再比如说:流程组件)2、基于如上平台构建自己的业务逻辑层
    按实际业务合理划分组件(这个要求分析功力太高,我也做不好)3、基于第二步的逻辑层写第三层代理封装
    如今一般来说以WebService最好,按传统来说就以一个COM+再次封装Client的调用4、Client端也需要合理规划
    这个就是早期行为,具体情况还得具体来说我的建议就是如上,想必还有许多不足之处,请大侠扔砖指教。