• 插件系统的构建


    从去年开始,我就在思考如何对我们的程序进行改进,因为我们的项目更多的是对现有软件的定制,于是我开始在思考如何构建插件系统,通过对这些插件的动态加载与卸载,这段时间在新项目中已经试验了,不过现在还是以LIB库嵌入程序中,后期将会采用dll库动态加载

    1.整理系统的接口
    今年接手后,我开始整理接口,后续的定制开发将会使用这些接口而不是直接在主干上进行修改,我对主干的代码现在有绝对的控制权,不允许别人去修改他,接口需要经过我的同意后才能合进主干,并且在整理接口的时候,尽量将接口原子化,接口声明也都是C代码,我在想后续开发是否可以通过Lua来进行,当然这个想法只是从去年年底开始酝酿

    2.使用回调机制
    我们以前的开发是直接原有的代码上修改,然后通过配置文件或者宏来定义,这样做的后果就是代码复杂难以维护,一个文件里面有5000行代码很正常,而且合并非常困难,我们的以前的主管都是用人工下去合并的,出错几率非常高,去年我就深受这种开发模式之苦
    后面我采用function和bind配合来提供类似于回调机制,其实原来系统内有一些接口已经提供了这种机制了,不过是使用虚函数的机制,但是因为我们的插件是构建在DLL上的,这样就要尽量避免DLL hell(http://blog.csdn.net/happydeer/article/details/8776) 的问题,最好不要使用虚函数,这个也是采用C代码而不是C++的原因之一
    当用户利用bind将一个函数绑定后并且向我们的系统注册后,当时间发生的时候,系统将会一一通知这些函数,从这个项目开始,我们采用这种方式后,效率和维护简便了很多

    从项目开始到现在,主要还是在做上面的事情,并且在新项目中使用这些,现在的"插件"还是在原有的解决方案里面加一个项目,然后按照上面的方式进行开发,后期只要改一下配置以及增加DLL管理模块,增加DLL导出接口就可以了,项目后面验收完毕后,将会开始采用这种方式下去开发

    3.DLL的动态加载
    DLL其实内部原理有点类似于我们的EXE程序,都是PE文件的格式,更重要的是,DLL在加载和卸载的时候都会有通知,这样,我们实际上可以将我们的插件当成一个程序
    http://www.blogjava.net/yipak/articles/182025.html




  • 相关阅读:
    6 November in 614
    4 November in ss
    标准模板库(STL)
    类模板
    函数模板和模板函数
    关于“宏定义”的作用范围
    运算符重载
    内存分配和释放的函数
    数据库恢复的基础是利用转储的冗余数据
    在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是
  • 原文地址:https://www.cnblogs.com/linyilong3/p/b913678d2c6a3fbfd9b3e19693f3e40a.html
Copyright © 2020-2023  润新知