代码之家  ›  专栏  ›  技术社区  ›  kovshenin

WordPress MVC兼容吗?[关闭]

  •  63
  • kovshenin  · 技术社区  · 14 年前

    有些人认为WordPress是一个博客平台,有些人认为它是一个CMS,有些人认为WordPress是一个开发框架。不管是哪种情况,问题仍然存在。WordPress MVC兼容吗?

    我读过论坛,三年前有人问过MVC。有一些积极的答案,也有一些消极的答案。虽然没有人确切知道MVC是什么,而且每个人都以自己的方式来看待它,但是在所有的讨论中仍然存在一个普遍的概念。

    我对MVC框架没有太多经验,而且似乎没有任何关于框架本身的内容。大多数MVC都是由程序员完成的,对吗?现在,回到wordpress,我们可以考虑核心重写引擎(wp-rewrite)控制器吗?作为模型查询插件逻辑?主题作为视图?还是我弄错了?

    谢谢;

    9 回复  |  直到 9 年前
        1
  •  46
  •   halfer Rajnish Kumar    12 年前
        2
  •  24
  •   Brenn    13 年前

    WordPress有点像MVC。如果有的话,它是一个拉式MVC布局,视图从模型中“拉”数据。它以一种非常连续的方式来完成这项工作,而不是使用许多不同的对象,但这实际上使前端模板更容易以许多方式编写。

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

    让我们把它记下来: WordPress得到一个URL。WordPress核心充当一个控制器,决定运行数据库的初始查询,以及通过扩展,应该加载什么视图(类别视图、单个日志或页面视图等)。然后,它打包初始查询响应并将其发送到视图文件。

    该视图文件可以是一个严格的仅显示文件,也可以请求内置文件之外的其他信息/查询。这是MVC的拉类型,视图从模型中拉取数据,而不是控制器从模型中“推送”数据到视图中。

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

    它的每一部分都不是一个对象,这并不会降低MVC。您可以更改wp core,而不必更改任何有关主题的内容。类似地,只要您使用内置函数,比如get_pages(),那么只要这些函数仍然返回正确的数据,模型和数据库表就可以更改。因此,模型独立于视图,控制器也独立于视图(除了视图添加控制器逻辑以比核心正常情况下做得更多)。

    虽然您可以让一个模型对象包含许多方法和类似wpmodel::get_pages(“blah blah”)的内容,并以这种方式包含所有内容,但仍然存在基本的关注分离。

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

    只要名字、论据等保持不变(或只是增加了新的论据),就可以保持关注的分离,并且可以在不干扰其他人的情况下更改其中一个。

    它不是MVC的超级干净版本(特别是当钩子参与进来的时候),但是在一个基本的层面上,它从那里开始。

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

    没有一个伟大的方法来做开发,和wp坐在像20%的网站,所以它做了一些正确的事情。 可能 这与不让人们学习/记忆复杂的类层次结构有关,以便让数据库回答“什么页是X页的子页?”处理这些数据。你能用OOP轻松点吗?是的,但是如果Joomla是一个很难用OOP实现一个复杂的定制网站的例子,那么wp就更容易、更快,时间就是金钱。

        3
  •  9
  •   halfer Rajnish Kumar    12 年前

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

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

        4
  •  5
  •   Dave Amphlett    12 年前

    只是用搜索引擎上的最新信息更新这个消息-wp mvc插件 http://wordpress.org/extend/plugins/wp-mvc/ 为插件开发创建MVC框架还有很长的路要走。您可以在这里了解更多信息: http://wpmvc.org/documentation/70/tutorial/

        5
  •  5
  •   Rahul Balakrishna    10 年前

    与WordPress相关的讨论中定期出现的主题之一是WordPress和MVC的概念。

    但问题是,MVC并不是我们试图证明的Web开发的银弹。是的,这是一个很棒的设计模式,我个人认为它像手套一样适合Web应用程序模型,但并非每个框架或平台都实现了该设计模式。

    举例来说:WordPress不是MVC。

    没关系。我认为我们需要放弃尝试将其推到项目中的愿望,尤其是当WordPress提供的模式不仅足够时,而且在正确利用时效果良好。

    但我喜欢MVC!

    我也是!事实上,我去年花了很多时间在一个或多或少模仿MVC架构的项目上。 MVC的高级示例。

    MVC的高级示例。

    例如:

    使用模板实现了视图 控制器是通过使用诸如create、read、update、destroy、delete等函数名的组合实现的(即使这些函数被挂接到wordpress api中 模型也是在序列化数据之前用来验证和验证数据的函数。同样,这要求将某些函数连接到WordPress中,以获得所需的结果。 < /代码>

    最后,一组重写规则以/people/update/1或/people/all的格式为应用程序提供了一组清晰的可预测URL。 WordPress实现了什么模式?

    WordPress实现了事件驱动的架构(其中有几个变体,如观察者模式)。

    简而言之,您可以从概念上将其视为以下内容:

    当WordPress处理信息时,会发生一些事情。 当这些事情发生时,您可以注册自己的函数来启动。 < /代码>

    不是很复杂吧? 事件驱动模式的高级示例 事件驱动模式的高级示例

    当你开始用它工作的范式来思考,而不是试图让它以你希望它工作的方式工作时,它是解放的。它有助于更轻松地解决问题。

    底线是:WordPress实现了事件驱动的设计模式,因此即使你最终尝试实现MVC,你仍然需要利用hook系统。

    如果你不小心的话,你最终可能会在没有完成你的工作的情况下尝试建造完美的建筑,从而发现自己在软件的大气中如此之高,以至于你实际上已经成为了一名建筑宇航员。 所以你是说避免设计模式?

    一点也不!设计模式是有目的的,因为最重要的是,它们基本上为我们提供了以前和通常解决的问题的解决方案。使用它们!

    但我想说的是,我们不需要仅仅因为喜欢这个模式就强迫事物适应这个模式。这不是他们的目的。相反,在我们的例子中,利用您选择的平台实现的主要模式,它是一个事件驱动的模式,然后在它们适合的地方实现模式(例如依赖注入或类似的模式)。

    否则,就像是试图把你的脚放在手套里。

    礼貌(完全复制:p)来源: http://tomcfarlin.com/wordpress and mvc/

    WordPress是WordPress和MVC的概念。

    但问题是,MVC并不是我们试图证明的Web开发的银弹。是的,这是一个很棒的设计模式,我个人认为它像手套一样适合Web应用程序模型,但并非每个框架或平台都实现了这种设计模式。

    举例来说:WordPress不是MVC。

    没关系。我认为我们需要放弃尝试将其引入项目的愿望,尤其是当WordPress提供的模式不仅足够,而且在正确利用时也能很好地工作时。

    但我喜欢MVC!

    我也是!事实上,我去年花了很多时间在一个或多或少模仿MVC架构的项目上。 MVC的高级示例。

    enter image description here

    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.
    

    最后,一组重写规则以/people/update/1或/people/all的格式为应用程序提供了一组清晰的可预测URL。 WordPress实现了什么模式?

    WordPress实现了事件驱动的架构(其中有几个变体,如观察者模式)。

    简而言之,您可以从概念上将其视为以下内容:

    Things happen when WordPress is processing information.
    You can register your own function to fire when these things happen.
    

    不是很复杂吧? 事件驱动模式的高级示例 enter image description here 事件驱动模式的高级示例

    当你开始用它工作的范式来思考,而不是试图让它以你希望的方式工作,它是解放的。它有助于更容易地解决问题。

    底线是:WordPress实现了事件驱动的设计模式,所以即使你最终尝试实现MVC,你仍然需要利用hook系统。

    如果你不小心的话,你最终可能会在没有实际完成工作的情况下尝试构建完美的体系结构,从而发现自己在软件的大气中如此之高,以至于你实际上已经成为了一名建筑宇航员。 所以你是说避免设计模式?

    一点也不!设计模式有一个目的,因为最重要的是,它们基本上为我们提供了以前和通常解决的问题的解决方案。使用它们!

    但我想说的是,我们不需要仅仅因为我们喜欢这个模式就强迫事物适应这个模式。这不是他们的目的。相反,在我们的例子中,利用您的选择平台实现的主要模式,它是一个事件驱动的模式,然后在它们适合的地方实现模式(例如依赖注入或类似的东西)。

    否则,就像是试图把你的脚放在手套里。

    礼貌(完全抄袭:p)来自: http://tommcfarlin.com/wordpress-and-mvc/

        6
  •  4
  •   Brian Zeligson    12 年前

    只是为了增加选项列表,(作为作者,我是有偏见的,) swpMVC 是一个功能齐全、轻量级的MVC框架,灵感来自Rails、Sinatra、Express和FuelPHP。它被完整地记录下来,当我使用和享受 wp-mvc 我希望模型能够自己填充视图,包括用于与所述模型交互的表单控件。

    我把这些放在一起很大程度上是为了减少在WordPress上构建一个应用程序所需的控制器代码的数量,结果是一个在WordPress内部运行的非常快速和有效的框架。模型基于 PHP Activerecord 现有wordpress数据类型包括8个模型,包括post、posteta、user、usermeta、term等。由于ActiveRecord库的存在,建模数据非常容易,到目前为止,我非常喜欢使用这个框架。

    还附带下划线PHP和PHP快速分析器(如fuelPHP中所示)。

        7
  •  2
  •   rodrigo-silveira selftaught91    12 年前

    RokkoMVC 是专为WordPress构建的微MVC框架。该项目旨在简化WordPress应用程序中的Ajax功能,并将使用模型、视图和控制器的所有其他好处引入主题中。

        8
  •  1
  •   halfer Rajnish Kumar    11 年前

    最近我有一个bash创建了一个插件,它使用了一个简单的视图控制器系统,并且非常喜欢结果,所以我将模板的内容分离出来。 to its own repo . 它提供了基于对象的控制器,将变量本地传递给PHP模板、模板片段(模板内的模板)和组件(模板片段及其自己的子控制器)。都在两个小班里!

    当然,我写这段代码的时候认为没有其他的wp开发人员考虑过这个问题 ;-) .

        9
  •  0
  •   lokers    11 年前

    它离MVC很远,没有什么像有些人说的那样,不是MVC就是…您在视图级别上编写逻辑的事实并不能将其限定为MVC框架。人们使用它的原因-很容易学习,你不需要成为一名优秀的PHP程序员,他们很懒惰。