什么是插件呢? 实际上, 我们在前面的文中已经说过了。 本来来小议论插件开发。
买了新房子, 人可以住到里面去, 但往往需要安装各种插件(床啊, 桌子啊), 让人过的更舒服。
很早以前, Word软件是不支持转pdf功能的, 后来人们开发了插件, 功能更加强大。
从广义上来说, 配置文件也是一种插件, 在其中填写东西,被集成到软件中使用。
从更广义的角度来看, 软件中的各项设置, 就透露和插件的味道。
总之, 插件是为了使主件更加完善(通常, 如果没有插件,主件也能发挥功能)。 下面, 我们来玩代码:
#include <stdio.h>
int main()
{
return 0;
}
实际上, 无论是在Windows还是linux中, main函数都是会被系统调用的, 所以, 在这个意义上来说, 在上面程序中,系统就是主件, main函数不过是个插件而已, 也就是系统留给应用程序员(比如你我)的接口,这个接口叫回调接口。 我们往里面塞东西, 最终被系统调用。
如果你还没有弄清楚, 那怪我。我来继续说,咱们忽视什么叫系统, 什么叫系统调用main函数。看如下代码:
#include <stdio.h>
void apiDoAAA();
void apiDoBBB();
// call back api
int business()
{
apiDoAAA();
// add business code here
// ...
apiDoBBB();
return 0;
}
// function api
void apiDoAAA()
{
}
// function api
void apiDoBBB()
{
}
// main framework
int main()
{
int iRet = business();
return 0;
}
可以看到, main调用了business函数, main是主件, business是插件, 写插件的人负责在process接口中填写东西即可。 此时, 我们可以把可以说main是框架代码, 而business是业务代码。
在很多大公司中, 有专门的开发人员开发一套框架, 我们可以叫它组件或者主件, 这套框架可以运行, 但里面运行的东西是没有什么业务意义的, 上层开发人员只需要借助于这个框架, 往里面塞业务东西就可以了。 此时, 框架开发人员无需关注里面是什么业务,只需要关注框架是如何运行的。 而上层的开发人员不需要过多关注框架细节, 只需要关注具体业务就行。 从这个意义上来讲, 组件是通用的, 各种业务都可以用它, 而上层开发人员往里面塞的东西就可以叫业务插件(通常是动态库或者可执行的安装文件)了。
此时, 插件是卖钱的根本所在。 我们要理解清楚, 框架会提供两种接口给上层应用程序:
1. 回调接口(上层应用程序在其中填写东西, 这个回调接口最终被框架调用), 如上面的business.
2. 被调接口(框架提供的一些函数, 里面的功能已经ok, 上层应用程序直接来调用这些函数), 如上面的apiDoAAA和apiDoBBB.
框架和上层应用程序的分工棒棒哒。 当然如果你玩过MFC, CocoaTouch之类的东西, 那就更容易理解框架和应用代码之间的关系了, 你中有我, 我中有你, 相互调用。
OK, 本文先聊到这里, 希望有助于大家理解插件和插件开发。