我已经创建了一些程序,但大多数程序都是基于意大利面条'做法。所有功能都在一起,如果我想添加新功能,我必须将其添加到核心文件中。
注意:我不是在问分离设计和逻辑。
语言是PHP。
我要问的是,通过允许其他用户(插件,组件或扩展程序)扩展应用程序,内容管理系统中使用的方法(以及如何实现它们)
这只是设计模式的问题吗?还是文件结构?或者什么?
答案 0 :(得分:3)
首先,您必须决定软件架构中插件行为的位置。然后你必须为这些插件定义一个接口。之后,您必须构建一个用于注册插件的界面。
Interceptor Pattern是您在应用程序中任何位置运行已注册插件的朋友。
您应该定义一个策略来优先执行队列中的插件。策略可以是FIFO(FirstInFirstOut)或允许用户定义的订单。
此外,您应该定义一个策略来处理任何插件抛出的错误和异常,以确保系统正在运行。
这仅代表一个粗略的概念,但包含可插件应用程序的核心元素。
PHP中一个易于访问的好例子可以是ZendFramework1。它为dispatch process in FrontController使用了一个简单的插件代理。它的工作原理是良好的描述here和良好的插图here。但你必须知道它存在更好的方法,例如面向方面的编程(AOP)。 PHP中的AOP可通过事件驱动编程(EDP)访问,也可通过使用外部包来访问,如AOP-PHP。