与 WordPress 相关的讨论中定期出现的主题之一是 WordPress 和 MVC 的想法。
但问题是,MVC 并不是我们试图让它成为的 Web 开发的灵丹妙药。是的,这是一个很棒的设计模式,我个人认为它像手套一样适合 Web 应用程序模型,但并不是每个框架或平台都实现了这种设计模式。
恰当的例子:WordPress 不是 MVC。
没关系。我认为我们需要将试图将其硬塞到我们的项目中的愿望搁置一旁,尤其是当 WordPress 提供的模式不仅足够,而且在正确利用时效果很好。
“但我喜欢 MVC!”
我也是!事实上,我去年在一个或多或少模仿 MVC 架构的项目上工作。
MVC 的高级示例。
MVC 的高级示例。
例如:
Views were implemented using templates
Controllers were implemented by a combination of using function names like create, read, update, destroy, delete, and so on (even though these functions were hooked into the WordPress API
Models were functions also were called to validate and verify data prior to serializing the data. Again, this required that certain functions be hooked into WordPress to achieve the desired result.
最后,一组重写规则为应用程序提供了一组干净的可预测 URL,格式为 /people/update/1 或 /people/all。
WordPress 实现了什么模式?
WordPress 实现了事件驱动架构(其中有多种变体,例如观察者模式)。
简而言之,您可以从概念上将其视为以下内容:
Things happen when WordPress is processing information.
You can register your own function to fire when these things happen.
不会太复杂吧?
事件驱动模式的高级示例
事件驱动模式的高级示例
当你开始思考它的工作范式而不是试图让它按照你想要的方式工作时,它就是一种解放。它有助于更轻松地解决问题。
底线是:WordPress 实现了事件驱动的设计模式,因此即使您最终尝试实现 MVC,您仍然必须使用钩子系统。
如果您不小心,最终可能会在没有真正完成工作的情况下尝试构建完美的架构,从而最终发现自己在软件的氛围中如此高涨,以至于您实际上已经成为了架构宇航员.
所以你是说避免设计模式?
一点也不!设计模式是有目的的,因为最重要的是,它们基本上为我们提供了以前和常见问题的解决方案。使用它们!
但我想说的是,我们不需要仅仅因为我们喜欢这种模式就强迫事物适应模式。那不是他们的目的。相反,利用您选择的平台实现的主要模式——在我们的例子中,它是一个事件驱动的模式——然后在适合的地方实现模式(例如依赖注入或类似的东西)。
否则,这就像试图把你的脚戴在手套里。
来自http://tommcfarlin.com/wordpress-and-mvc/的礼貌(并完全复制:P)