这是一个Delphi实现的插件框架,
我耗费了相当相当相当多的精力来设计她,虽然仅闪着点我微薄智慧的光芒,但我还是决定用Wisdom来命名她,
也因它是我绝无仅有的,在完成1年多后回头来看仍能相当满意的作品,
所以我补充了展示她特性的Demo和管理工具,决定将她开源发布给仍在坚持着的Delphi Fans。

我发现,人年龄越大,越害怕复杂的东西,越偏向喜欢清澈简单明了的事物,因此,这个插件框架的设计我是费尽心思地往简单上整,
务求扫上几眼几分钟就大概懂了原理,就能上手用起来;务求使用中只需遵守最少的使用守则!
为此,我把OSGI和Eclipse的插件设计精华提取提取再提取,思考思考再思考,终于得偿所愿,最终汇成了她!

好了,吹牛吹过头又吹过瘾了,就还是回到正事,介绍下这个框架都具备什么特性,有什么好处来吸引你。
1、她是微内核的设计
   什么是微内核?就是核心实现小如原子,其它一切皆是插件,通过插件的相互构织构建出大千世界。
与此相对应的,那些构建了基本框架,给你一堆既定接口让你完善细处的叫巨内核设计,我讨厌学习一堆接口,因此坚决支持微内核设计,
微内核下整个实现的核心代码可能就2000行内,对高手来说三刀两斧就阅读完了,代码虽小,却是灵活强大。
   用巨内核的叫水泥工,而在微内核外,那是你自由奔放的灵感创造,你就是世界的构筑者。

2、面向接口,任意角落调用
   插件核心、插件服务全部以纯接口方式暴露,任何插件在任何时候可以获取任何其它插件所声明提供的接口服务,不用关心怎么处理和
这些插件的关系,人人为我,我为人人嘛。

3、扩展点概念让插件无限扩展
   每个插件实现自己梦想的同时,能力大的还可以留给别人实现梦想的空间,这个空间就是扩展点,每个插件都可以向别的插件声明扩展空间,
任何其它插件都可以来实现这个扩展点,就如同一个插头又预留有插头口一样,插头和插头间可以互插而互连形成树状获得无限扩展能力,但
对于任何一个插件角度看去,任何其它插件又是平面化的,就像人与人一样,你可以与任何一个人你见到的人打交道,而不需要一定有介绍人。
   扩展点概念是Eclipse的设计精髓之一,通过扩展点,能让你的界面灵活得就像Eclipse一样。

4、她只使用纯DLL做插件(当然也可用BPL,我认为那只是打个钩的事情)
    Delphi下的BPL确实很好,但你一定咬牙切齿要维护一个支持那时的BPL的编译环境和控件,我也是这样想的,因此坚决支持纯正DLL。

5、她能支持除Delphi外的其它编译器生成的DLL
   像VC++有这么多优秀的库,不用甚是可惜,所以,支持它编译的DLL!如果万一还有支持不住的怎么办?比如像易语言?比如在Linux下跑?
好得我也考虑到了,刚才我有把微内核比作原子,大家都知道,原子还能更细分到电子,所以,微内核里的东西还能细分出来更换呢!内核里我就有一个DLL加载器,你只要为特殊的DLL重定义一个加载器,就能跑起来了,看到这里,是不是有点跃跃欲试了哈。

6、她不需要重启就能动态更新/更换新版本的DLL插件
   这功能在不能停的服务端那是相当有用对不对,听起来也很高大上对不对,其实实现很简单,你只需遵守一条规则就行,那就是她叫你释放
某个接口时你要立马无条件接受并立刻按她说的做,当然,一瞬间后她会立刻把你需要的服务接口送还给你。

7、插件懒加载,务求最少资源占用
   插件框架提供总是、按需、自动管理三种方式载入插件,不必要还没有用起的插件就留着在磁盘上吧,保持她苗条秀丽的身材跑得快效率高。
在自动这种方式下,如果插件在一段时间发现没人用,就把插件卸出内存,哇,这功能好啊!很遗憾,我没有做,不是懒,因为我细想后,觉得
这件事情可划入由外部插件来插手的领域,不是原子性的范畴,以保证微内核是真的微哈。

8、手动式还是配置全由你
   提供全套API让你可在程序中手动获取、管理、卸载插件DLL,当然也提供xml配置的方式自动管理插件,要不,小小程序也要配一个xml就说不过去了。

9、可能可以在Linux下跑
   我只用到了D7的语言特性,因此,小改一点应可以用Lazarus跑起来,但我是Linux菜鸟,没有发言权,所以只能说可能,求高手上斧。

感觉整个篇幅下来都是我吹嘘之词。。。唉,吹壮君子胆嘛,高手莫见笑。

然后再说下怎么使用,还是很简单地:
1、解压到目录A后,在Delphi环境中,Tools-->Environment Options,打开Library标签,在Browsing Path和Library Path中包含源码中的Core目录
2、新建项目,在Project-->View Source下的uses中,首先第一个打上”WisdomFramework“,在需要跑起的地方加一句TWisdomFramework.Run就可以了
3、在需要调用框架接口的地方,uses一下接口说明文件即可,其中”WisdomCoreInterfaceForD“是给Delphi用的,给C++用的头文件在Demo的Cplus里哦
这里有一条规则:如果搞有DLL中的界面元素显示到Host主窗口,那么在主窗口的OnClose或Destroy中,一定要调用一下TWisdomFramework.Stop

具体特性参看Demo演示。

最后,说一下这个框架的设计理念,这只需要一张图就足够了,如下:

在哪下载?我放到Delphi盒子上了,求大家留赠几根火柴,可否,请大伙阅后批示!
地址为:http://bbs.2ccc.com/topic.asp?topicid=458999

感谢:
   感谢飞鸿,要不是他时不时问一下的督促,我估计至今还没有完成这作品,要不是他提了好些建议,这可能还是一件粗糙遗憾的作品。


终于可以发布Delphi下收点OSGI精髓皮毛而设计的插件框架WisdomPluginFramework的更多相关文章

  1. Ionic APP 热更新 之 产品发布状态下的热更新搭建,去local-dev-addon插件

    上一篇,我们介绍了在本地开发环境下的ionic项目热更新测试, 本文,我们将详细说明如何在去掉cordova-hot-code-push-local-dev-addon插件的情况下,实现热更新. 使用 ...

  2. Delphi 的插件框架 WisdomPluginFramework

    WisdomPluginFramework是融合OSGI微内核理念 + Eclipse的扩展点概念而精心设计的轻量级插件框架, 由Delphi实现,但可以使用于Delphi.BCB.VC++中,提供非 ...

  3. DELPHI下的SOCK编程(转)

    DELPHI下的SOCK编程      本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为 ...

  4. 在Delphi下使用迅雷APlayer组件进行免注册开发

    之前都是用的delphi下的dspack进行的视频开发,这个组件其实很好用,就是找解码器麻烦点,而且还得在客户的计算机上使用RegSvr32.exe也注册解码器,要不有可能播放不了. 结果在查找合适的 ...

  5. DELPHI下的SOCK编程

     DELPHI下的SOCK编程(转自http://www.cnblogs.com/devcjq/articles/2325600.html) 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会 ...

  6. 深入Delphi下的DLL编程

    深入Delphi下的DLL编程 作者:岑心 引 言 相信有些计算机知识的朋友都应该听说过“DLL”.尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的“悲惨”经历——无论再怎样小心, ...

  7. Delphi下利用WinIo模拟鼠标键盘详解 有参考价值

    https://blog.csdn.net/fgrass_163/article/details/6365296 Delphi下利用WinIo模拟鼠标键盘详解 2011年04月26日 21:03:00 ...

  8. 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

    在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...

  9. Delphi下使用Oracle Access控件组下TOraSession控件链接

    Delphi下使用Oracle Access控件组下TOraSession控件链接数据库,使用  orsn1.Options.Direct:=true;  orsn1.Server:=IP:Port: ...

随机推荐

  1. delete之后千万要记得将指针置空,即勿重复delete!!!

    下面这段代码有什么问题吗?(Arduino上运行) class C{ public: C(){ ptr = ]; } ~C(){ if(ptr!=NULL)delete [] ptr; } void ...

  2. freemaker转word xml注意事项

    java类字符串变量如果含有以下2种字符: &和  <,必须转义否则转化将失败. 其中: &替换成 & <替换成 < 因为一些怪字符数据库存储时已转义了,从数 ...

  3. 【转】PHP字符转义相关函数小结

    文章中有不正确的或者说辞不清的地方,麻烦大家指出了--- 与PHP字符串转义相关的配置和函数如下: 1.magic_quotes_runtime 2.magic_quotes_gpc 3.addsla ...

  4. Golang 绘图基础 -绘制简单图形

    前一节讲的是 绘图到不同输出源,请看地址: http://www.cnblogs.com/ghj1976/p/3440856.html 上一节的例子效果是通过设置每一个点的的RGBA属性来实现的,这是 ...

  5. VS 2013 EFSQLITE

    在 vs 2013 上用 1.NuGet程序包来获取,它也会自动下载EF6的包 :system.Data.sqlite 他会自动下载 其它几个需要的包. 2.在Sqlite官网上下载对应的版本:htt ...

  6. 对人脑处理视觉的描述(摘《学习OpenCV(中文版)》)

    人脑将视觉信号划分入很多个通道,将各种不同的信息输入你的大脑.你的大脑有一个关注系统,会根据任务识别出图像的重要部分,并做重点分析,而其他部分则分析得较少 .在人类视觉流中存在大量的反馈,但是目前我们 ...

  7. Intent传输数据的补充

    发现用intent的putExtra()或者putExtras()传输的都是基本数据类型. 如果要传输自定义数据类型,就要用到其他方法,老罗介绍的大概有3种: 1.  静态变量 2.  全局变量 3. ...

  8. DOM笔记(七):开发JQuery插件

    在上一篇笔记本中,讲解了如何利用jQuery扩展全局函数和对象:DOM笔记(六):怎么进行JQuery扩展? 在这篇笔记本中,将开发一个简单的动画插件,名称是example-plugin,用其实现一个 ...

  9. 开扒php内核函数,第二篇 hex2bin

    从上一篇我们得知怎样把ascii变成16进制显示,这篇我们是怎样把16进制变成ascii显示 我们还是从分析开始吧 先看这个函数的介绍吧 string hex2bin ( string $data ) ...

  10. PYTHON压平嵌套列表

    list 是 Python 中使用最频繁的数据类型, 标准库里面有丰富的函数可以使用.不过,如果把多维列表转换成一维列表(不知道这种需求多不多),还真不容易找到好用的函数,要知道Ruby.Mathem ...