我正在编写一个应用程序(一个用于“我的世界”的服务器包装器),希望通过插件使其可扩展。我有一个行之有效的系统,但我认为从长远来看,它可能需要改进。
现在,应用程序调用服务器类中的"get_plugins“方法,该方法首先导入名为pluginutils.py的文件(pluginutils.py定义了一个所有插件子类的BasePlugin类),然后遍历cmds目录中的每个.py文件,导入该文件并检查它是否为BasePlugin的子类。如果是,则将其实例存储在字典中,其中键是插件中定义的cmd类变量。每当应用程序从服务器接收到命令时,它都会检查它是否是字典中的键,如果是,则运行存储在字典中的实例的start方法,并将从命令中获取的必要参数传递给该实例。
虽然这样做有效,但我觉得这是一种草率的做法。是否有更好的技术来实现类似于此的系统?我想自己写这个(我不想使用类似zope.interface的东西),因为这是一种学习体验。谢谢。
发布于 2011-06-03 23:19:51
在用不同的平台和语言编写了许多不同的插件架构之后,我要说的是,大多数插件系统是如何编写的。
基本上,它归结为你的主机和你的插件需要有某种共同的契约来工作;换句话说,你的主机需要对你的插件有足够的了解,这样它就可以传递或共享插件所需要的任何公共资源,而插件需要对主机有足够的了解,以便与这些资源进行交互。
像您所做的那样,使用基类和派生类来实现这一点是一种非常常见的方法。
发布于 2015-08-26 11:53:17
我建议使用setuptools,因为插件最终会链接到sys.path列表的管理:
http://peak.telecommunity.com/DevCenter/PkgResources
从长远来看,基于分发/打包的解决方案(如setuptools )始终是一个可靠的选择,因为:
https://stackoverflow.com/questions/6233447
复制相似问题