一、何为插件式架构
我们可以理解为具有相同行为规范的组件可以称之为插件,简单的理解就是定义一个接口类,所有实现这个接口的类都可以称之为插件,对比一下组件来理解,组件通常是指行为不一样,但最终能做完成一件事,就比如说我们调用发送邮件的组件需要五个参数且调用方法为send,调用上传文件的组件需要四个参数且调用的方法为upload,如果要做成插件的话,则首先要抽象并定出公共的行为并且参数一致,那么在上例中,我们可以定义统一的行为为execute,统的参数可以为指定一个配置文件或使用map,这样我们就可以抽象出一个接口了,那么发送邮件与上传文件都实现这个接口类的话,那么就可以称之为插件了。我们常见的服务化调用方式或API调用方式可以称之为调用组件。
二、示例
1、eclipse
eclipse架构示例
Eclipse系统启动时,其运行时内核会启动平台的基础部分查找所有可用的插件,读取其插件的声明文件plugin.xml(声明了它同其它插件的互连关系),并在内存中构建一个插件注册表。
2、kettle
Kettle架构示例
Kettle是众多“可供插入的地方”(扩展点)和“可以插入的东西”(扩展)共同组成的集合体。在我们的生活中,电源接线板就是一种“扩展点”,很多“扩展”(也就是电线插头)可以插在它上面。
在Kettle中不管是以后的扩展还是系统集成的功能,本质上来讲都是插件,管理方式和运行机制是一致的。系统集成的功能点也均实现了对应的扩展接口,只是在插接的说明上略有不同。
Kettle的扩展点包括step插件、job entry插件、Database插件、Partioner插件、debugging插件,这里我们重点介绍step、job entry、database插件。
三、总结
插件式架构是一种理想的高扩展性的架构,应用广泛。在一个系统中,如果架构目标需要着重考虑扩展性的话,那么插件式架构是个不错的选项。
插件式架构很典型的体现了设计原则中好莱坞原则(Do not call us, we will call you),把扩展功能从框架中剥离出来,降低了框架的复杂度,扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。
要实现插件式架构的话,几要需要重点考虑的点是:基本框架、插件管制机制、插件接口定义、插件通信。下图可以看做一个基本的插件式架构图:
插件式架构雏形