我想问一个在wordpress之类的Web框架(cms)中创建插件/组件的想法。
我要的是概念性想法,而不是代码。
因此,想象一下我具有页面,用户,内容,设置等核心组件。
接下来,我想通过可以单独安装的插件(如在wordpress中)添加功能。
我的问题是这些插件将如何与核心结构进行交互。
例如,如果我有Seo组件,该组件添加了一些管理面板字段来管理每个页面的元标记。
如果Seo插件将字段添加到“页面”管理面板,而其他插件添加了另一个字段,那么我如何确保这些字段的排列顺序正确无误?
另一方面,如果我的插件添加了新的面板部分,则可能难以管理-我应该先创建页面,然后转到另一个部分并从那里管理seo标签-更多时间来创建页面。
对我来说,如果Seo确实是插件,则应与其他插件分开禁用/卸载/启用。
如果其他插件依赖于Seo插件-Seo插件真的是插件吗?
因为如果将其卸载,则依赖Seo插件的其他代码将中断。
您能建议一个好的架构通过插件/组件创建模块化架构吗?
我的问题是,如果不进行交互,很难分离不同的插件。
如果我具有Authenticate插件(处理登录/注销逻辑),那么代码将无处不在,而我不能只是简单地“禁用”它,依此类推。
谢谢
答案 0 :(得分:1)
我将尝试以一般方式分享自己的想法,然后给出更具体的答案。
首先,所有插件应与代码共享相同的设计,例如。您必须定义自己的接口和用于构建插件的库。插件本身应松散耦合,插件与核心组件之间不应有任何依赖关系。只有核心组件(页面)应该可以扩展-它们是第一级插件-您可以定义规则以从某些插件目录加载服务定义。
可以使用Command设计模式实现插件之间的集成-这样,您可以链接多个插件并使它们一起工作。
可以通过依赖项注入和空对象模式(与空实现交换服务定义的一种方式)完成与核心组件的集成,从而可以禁用登录/注销。
插件也应该能够卸载-这样,您需要删除所有插件文件。根据该要求,不可能合并核心组件和插件-核心组件应该知道需要在何处查找服务文件(容器定义)以加载它们并显示其中的内容。如果删除插件文件-核心组件应继续存在。
正如您提到的wordpress一样-如果要使用MySQL,则可以为扩展核心组件的所有插件数据创建关系表。删除插件时-删除相关表。
在前端,您可以在MVP和MVI之间组合使用。通过这种方式,您可以基于事件关闭登录组件-因此您的登录,注销,注册链接将在多个位置不可见-您可以将其置于页面底部或顶部,而无需if语句。
总体目标是摆脱if语句,松散耦合的代码以及将插件与核心组件和链式插件集成的简洁方法。