插件式软件结构设计(一):构建基于插件式软件平台

 dskinlite_plugin copy

本文主要简单介绍构建一个插件式软件平台所需要考虑的问题,文中主要介绍基于COM的插件式设计,目前大多数客户端选择基于COM的组件式设计,VC++中的MFC/ATL等框架也对COM做了很好的支持。当然文中所述的解决方案,使用非COM的方式也可以实现,实现原理是一样的。例如,著名的开源项目Miranda,即使用C/C++实现类似本文所述的插件机制。在下篇文章《插件式软件结构设计(二):构建基于DSkinLite的界面解决方案》中将讨论如何插件式软件的界面解决方案。

客户端软件的组件化是目前很多软件设计的选择,其优势有如下几点:

  • 功能模块划分,使软件结构清晰
    很容易想到将根据功能的不同划分成不同的模块。
  • 任务分配容易 有利于团队协作 

    充分利用COM的优势,减少组件之间开发方面的依赖。不同的组件如果有调用关系,则只需要在开发初期约定好IDL接口文件即可。依赖双方可以在互不影响的情况下各自开发,并且在集成测试时不需要做任何改动。

  • 适合敏捷开发,开发过程中模块更新,软件重构容易
    功能模块的划分,使得迭代软件开发更加容易,同时业务变更,产品变更对软件开发的影响较少。

1 组件分类

我们可以将组件分为以下3类: 

 逻辑组件,仅提供一些信息获取等功能,不跟界面打交道,这类组件可以以插件的方式存在,放入插件管理器管理。

提供基础服务的组件,比如网络服务模块,可以置于主程序中

有界面的组件模块,这类组件可以以插件的方式独立存在。

逻辑组件,提供特定的逻辑处理服务。例如:股票相关操作或信息获取接口:

   1:  HRESULT QueryStockInfo( LPCTSTR strStockID, LPCTSTR strInfo);
   2:  HRESULT BuyStock( LPCTSTR strStockID, int nNumber);


这样根据业务或功能的不同,可以划分不同的功能模块,形成逻辑上相对独立的模块。可以以插件加载入主程序后,其他模块都可以使用此模块提供的功能。

基础服务组件,提供软件的相关基础服务,如网络模块,日志模块。这部分组件可能以独立的dll或者lib出现,并且不放入插件管理器中,以为其提供的功能是基础功能,一般都是需要的,因此不需要将其插件化。如网络模块:

   1:  BOOL HttpOpenRequest(HANDLE hXLNet, LPCTSTR lpszVerb, 
   2:                       LPCTSTR lpszObjectName);
   3:  BOOL HttpQueryInfo(HANDLE hXLNet, DWORD dwInfoLevel, 
   4:                       LPVOID lpvBuffer);

有界面的组件模块,提供相关业务功能服务,同时其带有界面控件处理。这类组件可以以独立的组件或者插件的方式封装。如:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值