这是一个Delphi实现的插件框架,
我耗费了至关至关至关多的精力来设计她,虽然仅闪着点我微薄智慧的光芒,但我仍是决定用Wisdom来命名她,
也因它是我绝无仅有的,在完成1年多后回头来看仍能至关满意的做品,
因此我补充了展现她特性的Demo和管理工具,决定将她开源发布给仍在坚持着的Delphi Fans。小程序
我发现,人年龄越大,越惧怕复杂的东西,越偏向喜欢清澈简单明了的事物,所以,这个插件框架的设计我是费尽心思地往简单上整,
务求扫上几眼几分钟就大概懂了原理,就能上手用起来;务求使用中只需遵照最少的使用守则!
为此,我把OSGI和Eclipse的插件设计精华提取提取再提取,思考思考再思考,终于得偿所愿,最终汇成了她!
好了,吹牛吹过头又吹过瘾了,就仍是回到正事,介绍下这个框架都具有什么特性,有什么好处来吸引你。
一、她是微内核的设计
什么是微内核?就是核心实现小如原子,其它一切皆是插件,经过插件的相互构织构建出大千世界。
与此相对应的,那些构建了基本框架,给你一堆既定接口让你完善细处的叫巨内核设计,我讨厌学习一堆接口,所以坚定支持微内核设计,
微内核下整个实现的核心代码可能就2000行内,对高手来讲三刀两斧就阅读完了,代码虽小,倒是灵活强大。
用巨内核的叫水泥工,而在微内核外,那是你自由奔放的灵感创造,你就是世界的构筑者。
框架
二、面向接口,任意角落调用
插件核心、插件服务所有以纯接口方式暴露,任何插件在任什么时候候能够获取任何其它插件所声明提供的接口服务,不用关心怎么处理和
这些插件的关系,人人为我,我为人人嘛。dom
三、扩展点概念让插件无限扩展
每一个插件实现本身梦想的同时,能力大的还能够留给别人实现梦想的空间,这个空间就是扩展点,每一个插件均可以向别的插件声明扩展空间,
任何其它插件均可以来实现这个扩展点,就如同一个插头又预留有插头口同样,插头和插头间能够互插而互连造成树状得到无限扩展能力,但
对于任何一个插件角度看去,任何其它插件又是平面化的,就像人与人同样,你能够与任何一我的你见到的人打交道,而不须要必定有介绍人。
扩展点概念是Eclipse的设计精髓之一,经过扩展点,能让你的界面灵活得就像Eclipse同样。工具
四、她只使用纯DLL作插件(固然也可用BPL,我认为那只是打个钩的事情)
Delphi下的BPL确实很好,但你必定咬牙切齿要维护一个支持那时的BPL的编译环境和控件,我也是这样想的,所以坚定支持纯正DLL。
学习
五、她能支持除Delphi外的其它编译器生成的DLL
像VC++有这么多优秀的库,不用甚是惋惜,因此,支持它编译的DLL!若是万一还有支持不住的怎么办?好比像易语言?好比在Linux下跑?
好得我也考虑到了,刚才我有把微内核比做原子,你们都知道,原子还能更细分到电子,因此,微内核里的东西还能细分出来更换呢!内核里我就有一个DLL加载器,你只要为特殊的DLL重定义一个加载器,就能跑起来了,看到这里,是否是有点跃跃欲试了哈。spa
六、她不须要重启就能动态更新/更换新版本的DLL插件
这功能在不能停的服务端那是至关有用对不对,听起来也很高大上对不对,其实实现很简单,你只需遵照一条规则就行,那就是她叫你释放
某个接口时你要立马无条件接受并马上按她说的作,固然,一瞬间后她会马上把你须要的服务接口送还给你。插件
七、插件懒加载,务求最少资源占用
插件框架提供老是、按需、自动管理三种方式载入插件,没必要要尚未用起的插件就留着在磁盘上吧,保持她苗条秀丽的身材跑得快效率高。
在自动这种方式下,若是插件在一段时间发现没人用,就把插件卸出内存,哇,这功能好啊!很遗憾,我没有作,不是懒,由于我细想后,以为
这件事情可划入由外部插件来插手的领域,不是原子性的范畴,以保证微内核是真的微哈。设计
八、手动式仍是配置全由你
提供全套API让你可在程序中手动获取、管理、卸载插件DLL,固然也提供xml配置的方式自动管理插件,要不,小小程序也要配一个xml就说不过去了。
xml
九、可能能够在Linux下跑
我只用到了D7的语言特性,所以,小改一点应能够用Lazarus跑起来,但我是Linux菜鸟,没有发言权,因此只能说可能,求高手上斧。blog
感受整个篇幅下来都是我吹嘘之词。。。唉,吹壮君子胆嘛,高手莫见笑。
而后再说下怎么使用,仍是很简单地:
一、解压到目录A后,在Delphi环境中,Tools-->Environment Options,打开Library标签,在Browsing Path和Library Path中包含源码中的Core目录
二、新建项目,在Project-->View Source下的uses中,首先第一个打上”WisdomFramework“,在须要跑起的地方加一句TWisdomFramework.Run就能够了
三、在须要调用框架接口的地方,uses一下接口说明文件便可,其中”WisdomCoreInterfaceForD“是给Delphi用的,给C++用的头文件在Demo的Cplus里哦
这里有一条规则:若是搞有DLL中的界面元素显示到Host主窗口,那么在主窗口的OnClose或Destroy中,必定要调用一下TWisdomFramework.Stop
具体特性参看Demo演示。
最后,说一下这个框架的设计理念,这只须要一张图就足够了,以下: