我正在编写一个应用程序(Minecraft的服务器包装器),我希望通过插件进行扩展.我有一个适用的系统,但我认为从长远来看它可以使用改进.
我现在的方式是,应用程序在服务器类中调用一个"get_plugins"方法,首先导入一个名为pluginutils.py的文件(pluginutils.py定义一个BasePlugin类,所有插件都是子类),然后循环遍历每个.cmds目录中的py文件,导入它并检查它是否是BasePlugin的子类.如果是,则将其实例存储在字典中,其中键是插件中定义的cmd类变量.每当应用程序从服务器接收命令时,它都会检查它是否是字典中的键,如果是,则运行存储在字典中的实例的start方法,它将从命令中获取必要的参数.
虽然这有效,但我觉得这是一种草率的方式.有没有更好的技术来实现类似的系统?我想自己写这个(我不想使用像zope.interface这样的东西)因为这是一次学习经历.谢谢.
在不同平台和语言中编写了相当多不同的插件架构之后,我想说您已经了解了大多数插件系统的编写方式。
基本上可以归结为,你的主机和你的插件需要有某种共同的合同来使用;换句话说,您的主机需要足够了解您的插件,以便它可以传递或共享插件所需的任何公共资源,并且插件需要足够了解主机才能与这些资源进行交互。
正如您所做的那样,使用基类和派生类来实现这一点是一种非常常见的方法。
| 归档时间: |
|
| 查看次数: |
1349 次 |
| 最近记录: |