mal*_*yeb 2 php software-design application-design
我创建了一些程序,但大多数都是基于“意大利面条”方法。所有功能都在一起,如果我想添加新功能,我必须将其添加到核心文件中。
注意:我不是在问分离设计和逻辑。
语言是PHP。
我要问的是内容管理系统中通过允许其他用户扩展应用程序(插件、组件或扩展)来使用哪些方法(以及如何实现它们)
这只是设计模式的问题吗?或者文件结构?或者是什么?
首先,您必须决定插件行为在软件架构中的位置。然后你必须为这些插件定义一个接口。之后,您必须构建一个用于注册插件的接口。
拦截器模式是您在应用程序中的任何位置运行注册插件的朋友。
您应该定义一个策略来优先执行队列中的插件。策略可以是FIFO(先入先出)或允许用户定义的顺序。
此外,您应该定义一个策略来处理任何插件抛出的错误和异常,以确保系统正常运行。
这仅代表一个粗略的概念,但包含可插件应用程序的核心元素。
ZendFramework1 是 PHP 中易于访问的一个很好的例子。它在 FrontController 中使用一个简单的插件代理来进行调度过程。这里很好地描述了它的工作原理,这里也很好地说明了它的工作原理。但你必须知道它存在更好的方法,例如面向方面的编程(AOP)。PHP 中的 AOP 可以通过事件驱动编程 ( EDP ) 实现,也可以通过使用外部包(如AOP-PHP)实现。