为什么MVC设计模式广泛用于网站开发?

时间:2011-02-07 08:52:09

标签: php oop design-patterns codeigniter frameworks

我正在开发我对OOP设计模式的了解,并且我的主要关注点是网站开发和Web应用程序开发,我试图在这些领域中找到设计模式的示例,但似乎主要遇到Web框架(任何其他示例都会不胜感激)。在我看来,大多数(所有?)基于PHP的框架似乎都使用MVC设计模式。由于这是最广泛使用的,因此认为它是这种类型开发的最佳设计模式是正确的,还是反映了较浅的学习曲线而不是其他设计模式?

我还注意到codeigniter框架同时使用单例模式和MVC模式。这种混合设计模式是否常见并且是有效的还是因为特定原因在codeigniter中使用?

5 个答案:

答案 0 :(得分:3)

他们按名称使用MVC模式。这是一个buzzword被选中,因为它广为人知。概念用于Web应用程序的方式与original pattern.

具有平庸的相似性

它对于一个共同的命名法是有用的,因为人们对它应该做什么有一个模糊的理解。然而,有更好的模式,例如模型 - 视图 - 演示者更好地描述了在实践中所做的事情(该术语没有被使用,因为它是未知的)。还有其他一些技术上取代MVC的变种。

单身人士是另一种代码构造理念。它与您设计通用应用程序流的方式无关。它是用于识别常见对象结构习语的一些描述性术语之一。由于其名声的扩大,这个词有可能被过度使用。在实践中,它对于良好的应用程序设计既不重要也不重要。

以下是常见对象API的设计模式名称的简短概述:
http://www.fluffycat.com/PHP-Design-Patterns/

关于MVC的核心概念的一些讨论在这里(可能不相关但非常有趣):
http://c2.com/cgi/wiki?MvcIsNotImplementable
http://c2.com/cgi/wiki?MvcIsNotObjectOriented

答案 1 :(得分:1)

我认为你在这里混淆了一些概念。首先,MVC并不完全是一种设计模式,而是组织应用程序的一般概念。 B / c没有一个或最好的MVC实现。 MVC正是您的常识告诉您的关于构建数据处理的内容。分离你所看到的内容,从内部发生的事情和根本处理的信息。

单身人士通常在MVC中使用b / c,你有很多不同的对象使用相同的资源。要组织您可以使用作为singelton实现的Registry来提供对DB的访问权限。

祝你好运

拉​​斐尔

编辑:

实际上对于MVC结构的有用实现应该是什么样子有很多不同的看法。

例如,在书中,您通常会看到三个框,标签'模型','视图'和'控制器'。它们都用箭头连接起来。 IMO应该省略'view'和'model'之间的连接,因为模型应该由与视图通信的控制器处理。

此外,我认为区分业务逻辑和控制器非常重要。容易混淆。但BL属于模型层。从这个意义上说,我不认为MVC是三角形,而是三层系统V / C / M.更多。

答案 2 :(得分:1)

通过网站开发,基本上有两个流程正在进行中。您有服务器端,收集和/或操作数据。然后是客户端需要呈现的东西。 (某些数据在此步骤中传递给Views)

正如您在OOP中所了解的,最好将结构添加到您正在处理的数据中。这就是模型的用武之地。最后,您有控制器在模型上进行处理,然后将数据传递给视图。

你可能会说MVC是两个原则的后代:服务器/客户端分离和OOP。

对于单例类:这些类确实用于共享资源,如数据库。

答案 3 :(得分:1)

因为它有意义! :)

将所有应用程序的不同部分分成特定的层。每个层应该只做与特定问题相关的事情。在MVC中,这些关注点是模型,视图和控制器。当您将应用程序划分为彼此独立工作的层时,您就拥有了所谓的解耦应用程序。这很好,因为它允许您测试每个图层而不涉及其他图层。从理论上讲,您也可以使用新的实现完全替换一个图层,而无需更改其他图层。

  • 模型 - 负责业务逻辑和持久性

  • 控制器 - 驱动应用程序并作为模型和视图之间的桥梁

  • 查看 - 向用户显示模型

答案 4 :(得分:1)

一般来说:

  • MVC(模型 - 视图 - 控制器)是一种软件架构。
    重要:没有MVC设计模式;)
  • 设计模式是软件设计中常见问题的通用可重用解决方案。换句话说:它是常见问题的最佳实践。
    • 示例:单身,工厂方法,适配器,装饰器等

那么为什么经常使用MVC呢? 原因很简单:如果项目的所有开发人员都熟悉MVC(或其他架构),他们对代码放置位置或查找代码的位置有共同的理解。这是关于有效并编写好的代码。所以最后是关于达成共识。