在编写代码时,是否有一般性的编程程序来增加可扩展性的能力?
我想知道向系统中添加扩展型功能的常规过程是什么,以便可以通过某种插件API扩展功能,而不必修改系统核心代码。
这些功能通常是否依赖于系统所使用的语言,还是存在一般性的允许扩展的方法?
在编写代码时,是否有一般性的编程程序来增加可扩展性的能力?
我想知道向系统中添加扩展型功能的常规过程是什么,以便可以通过某种插件API扩展功能,而不必修改系统核心代码。
这些功能通常是否依赖于系统所使用的语言,还是存在一般性的允许扩展的方法?
我过去曾经使用基于事件的API来编写插件。你可以通过分派事件并提供对应用程序状态的访问来为插件插入钩子。
例如,如果你正在编写一个博客应用程序,你可能想在将新文章保存到数据库之前引发一个事件,并提供文章HTML以供插件根据需要进行更改。
gimme_the_interface()
的函数,该函数可以接受填充了函数指针的结构。这些函数指针将允许DLL进行调用、注册回调等操作。确定您想要在插件编写者上放置的最低要求。然后创建一个或多个接口,编写者必须实现这些接口,以便您的代码知道何时何地执行代码。
创建一个API,编写者可以使用它来访问您的代码中的某些功能。
您还可以创建一个基类,编写者必须继承该基类。这将使连接API更加容易。然后使用某种反射来扫描目录,并加载符合您要求的类。
有些人还为其系统制作脚本语言,或者实现现有语言子集的解释器。这也是一种可能的路线。
底线是:当您加载代码时,只有您的想象力才能阻止您。
祝你好运。
如果你使用的是像C或C++这样的编译语言,那么通过脚本语言提供插件支持可能是个好主意。Python和Lua都是非常优秀的脚本语言,被用来编写大量应用程序(如Civ4和Blender使用Python,Supreme Commander使用Lua等)。
如果你正在使用C ++,可以查看Boost Python库。否则,Python附带了可以在C中使用的头文件,并且对C / Python API进行了相当完善的文档记录。我发现Lua的文档似乎不是很完整,但这可能是因为我没有找到正确的方式。无论哪种方式,你都可以提供一个相当稳定的脚本平台,而不需要太多的工作。虽然这仍然不是一件容易的事情,但它为你提供了一个非常好的基础来继续开发。