MVC只是PHP编程的SEO吗?


9

大约有不计其数的“ PHP框架”。他们中的大多数人都遵循 MVC模式。欢迎克服osCommerce编码风格(处理逻辑与SQL和HTML大量混合),但是肯定会有更简单,更容易遵循的方法来获得可维护的应用程序设计。

最初的MVC概念针对的是GUI应用程序。对于Gtk / Python,相应地遵循它似乎是可行的。但是,PHP Web应用程序无法在实时视图(GUI元素)和持久性Controller运行时上运行。如果仅描述所使用的代码+目录分组或类命名,那肯定是一个误称。

“ MVC”似乎像是PHP框架的流行语。而且我实际上已经看到一个或两个成熟的PHP框架承认了这一点,但是无论如何都要重新定义该短语以匹配内部。
那一般是蛇油吗?为什么不使用更好的术语,而传播更明智的可维护PHP概念呢?

一些详尽的推理

为什么我怀疑PHP实现没有遵循真正的MVC模式:

模型:理论上,模型应该很胖并且包含业务逻辑,而控制器应该是瘦处理器(输入->输出)。实际上,PHP框架提倡浅层模型。CI和Symfony例如等同于Model == ORM。即使HTTP输入也由控制器处理,也不被视为模型。

视图:打折了AJAX的变通办法,网页上没有视图。PHP框架仍然可以抽出页面。该接口仍然有效地遵循普通的HTTP模型,与非MVC应用程序相比没有任何优势。(最后,没有一个广泛使用的php框架实际上不能输出到GUI Views而不是HTML。我见过一个可以运行Gtk / Console / Web的PHP库,但是这些框架不能。)

管理员:我不确定。控制器可能不需要在MVC模型中长时间运行并保持活动状态。但是,在PHP框架上下文中,它们主要是请求处理程序。并不是真正值得争论的事情,但是它听起来有点b琐。

会有更好的描述符吗?我见过像PMVC或HMVC这样的缩写词。尽管那里的描述变得更加模棱两可,但是也许这些描述会比当前的Web框架描述得少一些?


因此,总而言之:PHP框架实现了与原始MVC 相似的概念。我认为这是最好的位置钉:stackoverflow.com/questions/1549857/simple-php-mvc-framework/...
马里奥

我很惊讶地读到“大多数PHP框架仅将视图用作页面”。在我使用的所有PHP框架中,View可以是任何东西,它基本上只是HTML模板。因此它可能是文本框,侧边栏,导航栏,静态文本块,甚至是页面布局。我想不出任何能让您将Views嵌入到Views中的框架,只要您实际上在Controller中完成了实际的业务逻辑/处理,就可以做几乎所有事情。
Lotus Notes

模型(不是复数)是一个。它不是一个文件或类。它是域对象,数据映射器和服务的集合。阅读
詹姆斯,

3
... SEO?“搜索引擎优化”?
2013年

Answers:


12

我认为您正在以完全错误的方式看待这个问题。GUI应用程序和网页是天壤之别,因此MVC的完全相同的定义将永远不会适用于两者。MVC更是关于理想的:将应用程序的某些部分(如显示和逻辑)分开。

在PHP(或一般来说,网络)中,视图本身就是网页:HTML输出。根据您的定义,它不是“实时的”,而是您只需单击链接即可返回到控制器(即另一个页面请求)。

控制器型号是哪里做的事情不同,像你这样的解释。在PHP中,模型倾向于是数据层,与数据库交互等等。但是它仍在对情况进行建模,并且控制器(即使每个页面加载一次)仍控制应用程序流。

因此,尽管在GUI应用程序与Web应用程序中的实现方式不同,“ Model-View-Controller”这个名称还是很合逻辑的。


我不反对MVC的抽象概念。我反对PHP框架实际上只是实现Passive-MVC是不诚实的。甚至“ Model-View-Presenter”模式也是更现实的描述。但是可以肯定的是,将术语应用到其他域时必须弯腰。原始问题;弯曲一词会成为流行语吗?
mario 2010年

3

我不了解PHP框架,这是从低级语言的角度来看的。

楷模:

从理论上讲,模型应该很胖并且包含业务逻辑

这完全可以做,我不知道PHP与这个有什么关系...

模型是PHP中的数据类,可能会与数据库通信,
然后您还可以将相同的模型或JSON格式的部分模型发送给客户端。

我不会说业务逻辑,它更像是数据逻辑(验证,数据库交互,导入/导出等)。

控制器应该是瘦处理器(输入->输出)

您的Controller类与Model类进行交互,它们确实很薄。

根据输出,对模型执行一些操作,然后将ModelView返回给客户端。

实际上,PHP框架提倡浅层模型。CI和Symfony例如等同于Model == ORM。即使HTTP输入也由控制器处理,也不被视为模型。

我不太了解那些PHP框架...

但是HTTP输入应该在到达控制器之前进行处理,
您可以轻松创建一个类,将GET和POST数据转换为良好的路由和参数。

这正是ASP.NET MVC 2中发生的情况,并且没有任何问题,
我不知道PHP会如何发生,但我想它将密切相关。

您甚至可以轻松地将GET和POST数据转换为模型,该模型可能包含该构造函数的逻辑。或者可以为此添加一些单独的类。


观看次数:

AJAX打折的解决方法,网页上没有Views。PHP框架仍然可以抽出页面。

我不明白为什么不能这样做,唯一的区别是协议和PHP可以返回JSON等。

页面是您的视图,它可以通过AJAX + JSON请求和更新。
再说一次,我并不是真的知道那些PHP框架,但是在ASP.NET MVC 2中,它是这样工作的。

该接口仍然有效地遵循普通的HTTP模型,与非MVC应用程序相比没有任何优势。(最后,没有一个广泛使用的php框架实际上不能输出到GUI Views而不是HTML。我见过一个可以运行Gtk / Console / Web的PHP库,但是这些框架不能。)

您获得的唯一好处(与普通应用程序相同)是将其分离为模型(数据)+视图(GUI)+控制器(逻辑)。类似地,您不会看到一个C ++框架,它实际上可以输出为HTML或JSON而不是GUI视图。


控制器:

我不确定 控制器可能不需要在MVC模型中长时间运行并保持活动状态。但是,在PHP框架上下文中,它们主要是请求处理程序。并不是真正值得争论的事情,但是它听起来有点b琐。

MVC是一种软件体系结构/模式,控制器在其中运行,并且不会运行多长时间。


1

但是,PHP Web应用程序无法在实时视图(GUI元素)和持久性Controller运行时上运行。

不,他们一定会!

考虑一下AJAX应用程序,然后视图向控制器询问一些内容并返回部分视图,
然后将该视图或数据填充到页面中的某个位置,从而进行实时更新。

Controller也具有持久性,因为您可以使用cookie /会话。

“ MVC”似乎像是PHP框架的流行语。

MVC是一种软件体系结构,某些框架可能会将其用作流行语,但其他框架却可以正常使用...
请参阅Wikipedia上一些框架的列表

是MVC只是php编程的SEO?

MVC和SEO是两件事,但是是的……MVC越来越受欢迎。


1
当然,AJAX UI元素将其拉近了,但这是一种解决方法。而且似乎仍在弯曲定义。(顺便说一句,我知道Cappucino.org和其他真正的工具包,但指的是PHP框架总数。)
mario 2010年

不会称之为变通方法,那么您也可以将Qt和其他框架也算作变通方法。。。只有服务器和客户端之间的数据传输开销很大,而以当前的连接速度和延迟来说,这还算不上什么不再。我看不出它是如何改变定义的:该模式将域逻辑(用户的应用程序逻辑)与输入和表示(UI)隔离开来,从而允许每个对象的独立开发,测试和维护。
Tamara Wijsman 2010年

1
我明白你的意思了。如果将PHP解释为应用程序服务器,将AJAX解释为逻辑和UI之间的RPC机制,则可以。我仍然称其为HTTP的解决方法。OTOH不确定是否与MVC面额有关。我认为我实际上是在反对只有““”“ MVC”“”提供您描述的响应式和交互式Web UI的含义。
mario 2010年

-1

我认为在php中使用MVC会使程序员进入网络。当您知道如何使用MVC时,从Java到PHP变得更容易。


+1但这仅仅是术语上的优势,还是PHP框架接近Java实现。(隐式地,您是在谈论Java GUI还是Web / Struts?)
mario 2010年

我不确定,但我使用的是zend框架,我想它与其他MVC框架相同:知道在模型,视图和控制器中要做什么非常重要,因此编程世界与Internetscripting之间存在差距世界是封闭的。也许互联网脚本时代已经结束,我很乐意看到这一点。太越野车了。
baklap 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.