基于插件化的客户端框架结构介绍

前言

  最近在研究桌面客户端程序框架,自己也写了一个客户端框架,所以在博客中记录开发的一些想法,与博友一起学习探讨。

1、框架定义

  框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。

2、框架结构

  

 

  上图是框架的一个简单结构体,其中Frame为框架组件,Hplug为插件管理集,管理所有的UI插件与Logic插件(将UI显示与后台逻辑分离),公共模块包括内存池与线程池等模块。

3、框架接口

  框架中完成所有的组件的加载,并对外提供框架服务接口,通过该接口可以获取到所有的插件接口。

  (1)框架接口

        在框架程序中调用,并初始化需要的组件。

typedef int (__stdcall *pFrameMsgCB)(int nMsg, LPARAM lParam, const char* szInfo, long lData);

BOOL FRAME_API Frame_Init(const char* szXmlFile, pFrameMsgCB pfn = NULL, long lData = 0);

BOOL FRAME_API Frame_Unit();

long FRAME_API Frame_GetModule(const char* szKey, const char* szDesc, const char* szVersion);
View Code  

  (2)框架服务接口

         在框架中将框架服务接口注册到插件中,插件在需要时通过该接口与其他插件交互。

typedef struct tag_IFrameService
{
    long (__stdcall *pGetModule)(const char* szKey, const char* szDesc, const char* szVersion);

}IFrameService, *pIFrameService;
View Code

4、插件接口

   插件开发按照HPlugin定义规定,UI插件与Logic插件需要实现以下接口:

typedef int (HPLUGIN_API *pHplugin_Init)();
typedef int (HPLUGIN_API *pHplugin_Unit)();
typedef void (HPLUGIN_API *pHplugin_RegSvr)(long lSvr);    //该接口根据具体的插件情况而定,可不实现
typedef char* (HPLUGIN_API *pHplugin_GetInterfaceKey)();
typedef char* (HPLUGIN_API *pHplugin_GetInterfaceDesc)();
typedef char* (HPLUGIN_API *pHplugin_GetInterfaceVersion)();
typedef int (HPLUGIN_API *pHplugin_QueryInterface)(const char* szKey, const char* szDesc, const char* szVersion, HpluginInstance* pInterface);
View Code

   UI插件必须返回以下实例:

typedef struct tagPluginUI 
{
    HWND (__stdcall* pCreatePlugin)(HWND hParent, RECT rc);
    void (__stdcall* pDestroyPlugin)();

}PluginUI;
View Code

  Logic插件返回的实例根据需要而定,如:

typedef struct tag_IAdd 
{
    int (__stdcall * pAdd2)(int a, int b);
}IAdd, *pIAdd;
View Code

  插件配置文件说明:

<?xml version="1.0" encoding="UTF-8" ?>
<hplug>
<!-- file:插件相对路径  fkey:插件关键字  name:插件名 desc:插件说明(Logic为逻辑处理插件,UI为UI插件)version:插件版本 -->
<plugin fkey="Add" name="Add" desc="Logic" version="V1.1" file="Hplugin\Logic\Add\IAdd.dll" />
</hplug>
View Code

5、框架程序

   框架程序为一个win32桌面程序,根据框架对应的配置文件加载框架并启动框架程序。

  

   框架程序配置文件说明:

<?xml version="1.0" encoding="UTF-8" ?>
<FrameClient>
    <!-- 启动默认UI -->
    <default_ui version = ""></default_ui>
    <!-- 插件配置文件(包括UI插件和Logic插件) -->
    <hplugin>Hplugin.xml</hplugin>
</FrameClient>
View Code

总结

  开发者只需要关心自己的程序UI界面与后台逻辑,所有的业务逻辑都插件化,按照插件规范开发插件即可。

 

转载请注明来源,支持正版原创,文明博客使用风气。

--来自taukeWang0311@163.com

转载于:https://www.cnblogs.com/taukeWang/p/6226306.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值