首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否兼容WordPress MVC?

是否兼容WordPress MVC?
EN

Stack Overflow用户
提问于 2010-05-18 20:21:24
回答 9查看 42.4K关注 0票数 63

一些人认为WordPress是一个博客平台,一些人认为它是一个内容管理系统,一些人将WordPress称为一个开发框架。无论是哪一个,问题仍然存在。是否兼容WordPress MVC?

我读过论坛,大约三年前有人问起了MVC。有一些肯定的答案,也有一些否定的答案。虽然没有人确切地知道MVC是什么,每个人都以自己的方式思考它,但在所有的讨论中仍然有一个通用的概念。

我几乎没有使用MVC框架的经验,而且似乎没有任何关于框架本身的东西。大部分MVC都是由程序员完成的,对吗?现在,回到WordPress,我们可以将核心重写引擎(WP_Rewrite)视为控制器吗?作为模型的查询和插件逻辑?和主题作为视图?还是我全搞错了?

谢谢;)

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-30 02:35:01

Wordpress本身并不是MVC架构的,但是可以在框架中构建非常面向MVC的主题和插件。有几个工具可以提供帮助:

WordPress MVC解决方案:

Churro工厂:@ wordpress.org/extend/plugins/churro

  • Tina-MVC:@ wordpress.org/extend/plugins/tina-mvc

  • Plugin

  • :@ wordpress.org/extend/plugins/plugin-factory

  • MVCPress:http://mozey.wordpress.com/2007/01/22/mvcpress-screenshots/#comment-3634 (废弃但有趣的想法)

关于WordPress.org想法和跟踪的MVC线程:

  • http://wordpress.org/extend/ideas/topic/mvc-plugin-framework
  • http://wordpress.org/extend/ideas/topic/complete-reestructuring
  • http://wordpress.org/extend/ideas/topic/rewrite-wordpress-using-mvc
  • http://wordpress.org/extend/ideas/topic/wordpress-theme-revamp (更多关于XSL而不是MVC)
  • http://core.trac.wordpress.org/ticket/12354 (在小部件中的MVC上))
票数 46
EN

Stack Overflow用户

发布于 2012-01-07 03:55:03

Wordpress是一种MVC。如果说有什么不同的话,那就是它是一种pull类型的MVC布局,View从模型中“拉”出数据。它以一种非常过程化的方式来实现这一点,而不是使用许多不同的对象,但这实际上使得前端模板在很多方面更容易编写。

这也为视图提供了一定程度的控制器逻辑(因此类似于MVC)。

让我们运行一下: Wordpress会得到一个URL。wordpress核心起到了控制器的作用,决定了要运行的数据库初始查询,以及应该加载的视图(类别视图、单个帖子或页面视图等)。然后,它将初始查询响应打包并将其发送到视图文件。

该视图文件可以是严格的仅显示文件,也可以请求内置文件之外的附加信息/查询。这是MVC的pull类型,视图从模型中拉出数据,而不是控制器将数据从模型‘推’到视图中。

因此,当视图看到加载侧边栏或小部件区域的代码时,它会要求提供该信息。但是,应该显示哪些小部件是由控制器决定的,控制器查看侧边栏中的小部件模型,然后选择要在当前页面上显示的小部件,并将这些小部件返回给视图。

虽然其中的每一部分都不是对象,但这并不会减少MVC。你可以改变WP核心,而不需要改变主题的任何东西。类似地,只要你使用像'get_pages()‘这样的内置函数,那么只要这些函数仍然返回正确的数据,模型和数据库表就可以改变。因此,模型是独立于视图的,控制器也是独立的(除非视图添加了控制器逻辑来做比核心通常所做的更多的事情)。

虽然你可以让一个模型对象包含许多方法和像WPModel::get_pages(“废话”)这样的东西,并以这种方式包含所有东西,但仍然存在基本的关注点分离。

视图:模板文件控制器: WP核心模型:处理特定数据处理的各种函数。

只要名称、参数等保持不变(或者只是添加了新的),就可以保持关注点的分离,其中一个可以在不干扰其他的情况下进行更改。

它不是MVC的超级干净版本(特别是涉及钩子的时候),但在基本级别上,它是从这里开始的。

对此进行讨论并不是一件坏事。来自网站的请求本质上是过程性的:它是一个有清晰的开始和结束的过程,只需要一个过程来处理请求,获取数据,打包,然后死亡。您可以使用对象、对象方法和OOP布局来设置这些步骤(这将使某些事情变得更容易),或者您可以只编写大量的函数调用并以这种方式将它们分离出来。像私有变量这样的类成员会以这种方式丢失,但这取决于应用程序的需要……你可能并不关心。

没有一劳永逸的方式来做开发,WP占据了大约20%的网站,所以它正在做一些正确的事情。也许是为了让人们不必学习/记忆复杂的类层次结构,才能让数据库回答“哪些页面是页面x的子级?”并处理这些数据。你能用OOP让它变得那么简单吗?是的,但是如果Joomla是用OOP实现一个复杂的自定义网站有多难的一个例子,那么WP要容易得多,也更快,时间就是金钱。

票数 24
EN

Stack Overflow用户

发布于 2010-05-18 20:48:05

正如评论中已经提到的,MVC是一个架构设计模式,而不是一个特定的框架,不,Wordpress不遵循MVC模式。

视图(模板)与编程逻辑是分离的,但只是在前端,而不是在管理面板中,视图和应用程序逻辑的一般分离并不必然是MVC。MVC模式的实现通常假定它背后有某种面向对象的编程范例,而Wordpress主要是以过程化的方式实现的,在PHP函数中使用普通的SQL查询,因此也没有实际的模型。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2857143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档