Architecture 框架插件架构解决方案

Architecture 框架插件架构解决方案,architecture,Architecture,我想问一个在wordpress这样的web框架(cms)中创建插件/组件的想法 我要求的是概念性的想法,而不是代码 假设我有一些核心组件,比如页面、用户、内容、设置等等 接下来,我想通过可以单独安装的插件(如wordpress)添加功能 我的问题是这些插件将如何与核心结构交互 例如,如果我有Seo组件,它添加了一些管理面板字段,用于管理每个页面的元标记 如果Seo插件在“页面”管理面板中添加了字段,而其他插件又添加了其他字段,那么我如何才能确保这些字段按某种顺序排列 另一方面,如果我在插件中添加

我想问一个在wordpress这样的web框架(cms)中创建插件/组件的想法

我要求的是概念性的想法,而不是代码

假设我有一些核心组件,比如页面、用户、内容、设置等等

接下来,我想通过可以单独安装的插件(如wordpress)添加功能

我的问题是这些插件将如何与核心结构交互

例如,如果我有Seo组件,它添加了一些管理面板字段,用于管理每个页面的元标记

如果Seo插件在“页面”管理面板中添加了字段,而其他插件又添加了其他字段,那么我如何才能确保这些字段按某种顺序排列

另一方面,如果我在插件中添加新的面板部分,这可能会更难管理-我应该创建页面,然后转到另一个部分并从那里管理seo标记-更多的时间来创建页面

对我来说,如果Seo真的是插件,那么它应该与其他插件分开禁用/卸载/启用

另外,如果其他插件依赖于Seo插件,那么Seo插件真的是一个插件吗

因为如果卸载它,依赖Seo插件的其他代码将被破坏

你能推荐通过插件/组件创建模块化架构的好架构吗

我的问题是,如果不相互交互,很难分离不同的插件

如果我有身份验证插件(处理登录/注销逻辑),代码将到处都是,我不能简单地“禁用”它等等


谢谢

我将尝试以一般方式分享我的想法,然后我将给出更具体的答案

首先,所有插件都应该与代码共享相同的设计——例如,您必须定义自己的接口和库来构建插件。插件本身应该是松散耦合的,插件和核心组件之间没有依赖关系。只有核心组件(页面)应该能够扩展-它们是第一级插件-您可以定义规则从特定插件目录加载服务定义

插件之间的集成可以通过命令设计模式来实现——通过这种方式,您可以链接多个插件并使它们一起工作

与核心组件的集成可以通过依赖项注入和空对象模式(一种使用空实现交换服务定义的方法)完成,这样您就可以禁用登录/注销

插件也应该能够卸载-这样你就需要删除所有插件文件。基于这一需求,不可能合并核心组件和插件——核心组件应该知道需要在哪里查找服务文件(容器定义)并加载它们,并显示它们的内容。如果删除插件文件,核心组件应该继续存在

正如您提到的wordpress——如果您打算使用MySQL,您可以为扩展核心组件的所有插件数据创建关系表。删除插件时-删除相关表

在前端,您可以使用MVP和MVI之间的组合。通过这种方式,您可以根据事件关闭登录组件,这样您的登录、注销、注册链接在多个位置上都不可见,您可以将其放在页面的底部或顶部—无if语句


总的来说,我们的目标是摆脱if语句、松散耦合的代码和将插件与核心组件和链插件集成的干净方式

谢谢,很好的解释,你能给出一些基本的例子如何摆脱if语句MVP MVI(pseude代码会很有帮助)。另一件困难的事情是,例如,如果我的插件添加字段到核心面板“页面”,如何从插件本身进行自定义,因为如果表单从其他插件更改,我的插件将知道其他插件的存在。谢谢,最近我看了这个演示,这里是源代码:我知道它的android,但你可以得到概念,并将类似的方法应用到你的案例中。插件不应该在核心“页面”中添加字段,它应该创建与页面相关的新db表。下一页应该有引导插件容器文件的代码。基本上,使用DI容器(管理员专用)可以显示插件数据。Pages将只从plugins/containers/myPlugin.xml加载一个xml文件,它将进入Hanks,我将观察它,但主要思想是我想“修改”现有功能,而不是创建另一个孤立的“面板”。这样做更容易,但我想知道如何更改/添加字段等在现实世界中发生的事情(这不仅适用于管理面板,也适用于网站),例如你的插件想要在登录表单中添加“记住我”复选框,想要为帖子页面添加共享按钮(但标题将从特定的帖子中获取,并与它们之间有关联)嗯,你必须保持松散耦合。如果你禁用启用插件,你的系统应该优雅地处理。例如,你只会错过功能而不是错误500。在禁用插件的过程中,你也可以从xml中删除部分。xml只是一种冒险-最好不要有这样的东西。这肯定是一个复杂的解决方案。你可以ed首先清除所有案例,对我来说,你可以使用auth,membered me,password-遗忘场景启动。你需要获得插件脚手架类型的框架,当你将拥有所有想要的行为。还有一个想法-在注册过程中获得额外的步骤,从额外的插件获得。这对于命令链p也是有效的案例模式。