WordPress和MVC的关系是WordPress讨论中经常涉及的话题之一。
但事实是,MVC并不是我们试图让它成为的Web开发的万能钥匙。是的,它是一个很棒的设计模式,我个人认为它非常适合Web应用程序模型,但并非每个框架或平台都实现了这种设计模式。
事实上,WordPress就不是MVC。
这没关系。我认为我们需要把尝试将其强行融入我们的项目的愿望放在一边,特别是当WordPress提供的模式既足够,而且正确使用时效果良好。
“但我喜欢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实现了事件驱动架构(其中有几个变体,如观察者模式)。
简而言之,您可以将其概念化为以下内容:
Things happen when WordPress is processing information.
You can register your own function to fire when these things happen.
不是太复杂,对吧?
事件驱动模式的高级示例
一个高级的事件驱动模式示例
当你开始按照它的范例去思考而不是试图让它按照你想要的方式工作时,它是解放的。它有助于更轻松地解决问题。
底线是:WordPress实现了事件驱动设计模式,因此即使您最终尝试实现MVC,仍然需要使用钩子系统。
如果你不小心,你可能会试图打造完美的架构,但实际上没有完成你的工作,因此你会发现自己在软件大气层中如此之高,以至于你有效地成为了一名宇航员。
那么你是在说避免设计模式吗?
并非如此! 设计模式具有目的,因为它们基本上为我们提供了先前和常见问题的解决方案。 使用它们!
但我想说的是,我们不需要试图强制事物符合模式,只因为我们喜欢这个模式。 这不是它们的目的。 相反,利用您所选择的平台实施的主要模式 - 在我们的情况下,它是事件驱动模式 - 然后在适当的位置实施模式(例如依赖注入或类似的内容)。
否则,这就像试图将脚放进手套里。
友情提醒(完全复制:P)来自:
http://tommcfarlin.com/wordpress-and-mvc/