MVC与3层架构?

时间:2011-01-02 07:37:30

标签: model-view-controller three-tier

MVC和3层架构的基本区别是什么?

13 个答案:

答案 0 :(得分:34)

3层架构风格 MVC 设计模式

因此不同。

但我们可以在3层架构风格中使用mvc模式。

这样:

演示文稿层:MVC模式中的“控制器和视图”。

业务层:来自MVC模式的“模型(数据)”。

数据访问层:原始数据访问层。

答案 1 :(得分:28)

在较大的应用程序中,MVC是仅N层架构的表示层。模型视图和控制器仅关注表示,并使用中间层使用数据层中的数据填充模型。

MVC也可以用作整个3层架构,其中Views是您的演示文稿,控制器是您的业务逻辑,模型是您的数据层(通常由DAL(如实体框架)生成)。

理想情况下,虽然您希望控制器变得粗糙和愚蠢,但将逻辑传递给“业务组件”,这实际上将成为您的中间层。

答案 2 :(得分:17)

在3层架构中,层之间的通信是双向的。在MVC中,通信是单向的;我们可以说每个“层”由左边的那个更新,然后更新右边的那个 - “左”和“右”仅仅是说明性的。

3层体系结构通常在3个独立的网络节点上部署为3个独立的进程。但MVC旨在作为单个进程部署在单个网络节点中。 (如桌面应用程序)

3层中的业务层通常包含实现着名模式的不同层,如业务委托,业务外观,业务对象,服务定位器,数据传输对象等。但MVC本身就是一种用于表示层的设计模式。 / p>

3层的目标是将业务逻辑与客户端和数据库分离,因此提供多个客户端协议,高可伸缩性,异构数据访问等。但MVC的主要目标是在一个部分中实现更改不需要换到另一个。

答案 3 :(得分:12)

与Michael在回答中所说的相比,我采取了不同的方法。

控制器永远不会成为您的业务逻辑。对我来说,业务逻辑属于模型层。然而,视图(以及某种程度上的控制器)和表示层的一部分,模型在MVC应用程序中永远不是它的一部分。模型应该是MVC应用程序的核心和灵魂,这就是Domain Driven Design所能在MVC应用程序中轻松实现的。

请记住,您不必将模型放在同一个项目中(谈到ASP.NET MVC)。它可以驻留在一个完全不同的项目中,它仍然可以作为应用程序的模型

作为表示层的MVC应用程序只能在具有许多层的大型项目中工作,但它永远不能充当提示者所要求的3层体系结构中的仅呈现层。

所以我们可以说MVC在三层体系结构的三个层中创建了两个(第三个可能是MVC体系结构本身不是其中一部分的数据层)。

感谢。

答案 4 :(得分:7)

什么是3层架构?

三层(层)是client-server architecture,其中用户界面,业务流程(业务规则)以及数据存储和数据访问是作为独立模块开发和维护的,或者通常在不同的平台上。基本上,有3层,第1层(表示层,GUI层),第2层(业务对象,业务逻辑层)和第3层(数据访问层)。这些层可以单独开发和测试。

DAL - 数据访问层(它具有Connectionstring和数据读取和执行过程)

BOL - 业务对象层(它有查询)

UI - 用户界面(表格和代码背后)

更多详情:3 Tier Archtecture

答案 5 :(得分:7)

两者之间没有任何关系。 MVC是表示层模式。整个模型 - 视图 - 控制器存在于表示层中。

  • 模型是保存数据的对象(通常只是VO),由View或由View填充。

  • 控制器是获取请求(并可能填充模型)并调用服务层的内容。然后获取另一个(或相同的)模型并将其发送回View。

  • 查看是显示模型的内容,并提供捕获用户输入的组件。 (它通常是Web应用程序中的模板引擎,或桌面应用程序中的UI组件)。

在谈论3层(或n层)应用程序时,我们讨论的是整个应用程序的体系结构,它由表示层(整个MVC),服务层(业务类)和数据访问层组成。

服务层(以及后面的所有内容)隐藏在MVC的控制器后面。

答案 6 :(得分:6)

3层体系结构是线性的,客户端层实际上从未与数据层实际通信 - 所有通信都通过中间层。另一方面,MVC更加三角形,其中视图向控制器发送更新并从模型接收更新,控制器更新模型。

(参见http://en.wikipedia.org/wiki/3-tier_architecture上的“与MVC架构的比较”)

答案 7 :(得分:6)

IMO在3层体系结构和MVC之间存在没有直接比较。两者都是结合使用,因此我们倾向于通过相同的镜头看到它们。从概念上讲,它们不需要一起使用。我可以使用使用MVC所提供的3层体系结构。

我没有详细说明定义部分,但简而言之:

3层是一种软件架构方法,其中用户界面,业务流程是逻辑,数据层是独立开发的,最常见的是在不同的平台上。

MVC 已经在一段时间内从软件模式演变为架构模式,现在在所有主要框架中都可以看到。

答案 8 :(得分:6)

每个应用程序都有一个更多的关注层 1)表示层或UI层 2)业务层或业务逻辑层 3)数据访问层或数据层

3层架构通常将每个层由网络分隔开。 I.E.表示层位于某些Web服务器上,然后通过网络与后端应用服务器通信以获取业务逻辑,然后再通过网络与数据库服务器通信,也许应用服务器也会呼叫某些远程服务(比如Authorize.net进行付款处理)。

有时我们需要更多上述类型的层和更多机器,然后它被称为N层

MVC 是一种编程设计模式,其中代码的不同部分负责在某些应用程序中表示模型,视图和控制器。这两件事是相关的,因为例如Model层可能有一个内部实现,它调用数据库来存储和检索数据。控制器可以驻留在网络服务器上,并远程调用应用程序服务器以检索数据。 MVC抽象出应用程序架构如何实现的细节。 模型我们想要构建哪个模型 查看表示应用程序的UI 控制表示控制应用程序的逻辑

3层只是指实现的物理结构。这两个有时会混淆,因为MVC设计通常使用3层架构实现。

答案 9 :(得分:3)

我的经验是,对于写得不好的3层,MVC只是另一个“时尚”术语,其中一些通信在业务层周围跳跃,因此客户端和/或数据层也混合了业务规则。

我讨厌像这样编写的代码 - MVC这个术语必须设计成让人力资源招聘人员误以为老年程序员(他们知道它是“3层”)并不适合这份工作。

答案 10 :(得分:3)

在MVC中:MVC架构是三角形的:视图向控制器发送更新,控制器更新模型,视图直接从模型更新

三层:三层架构是客户端层永远不会直接与数据层通信 在三层模型中,所有通信都必须通过中间层

Vikas Joshi 软件工程师

答案 11 :(得分:1)

  • 3-Tier是线性架构。 (表示层 - >逻辑层 - > 数据层然后数据层 - >逻辑层 - >表示层)但MVC 是三角形建筑。 (控制更新视图和模型。模型 更新视图。)
  • MVC可以在3层架构中包含表示层(移动应用程序,Angular,如js框架等)和逻辑层(J2EE,Laravel等)。
  • 3层的图层可以在不同的网络节点中实现。但是,MVC中的元素通常在相同的网络节点中实现。

答案 12 :(得分:-6)

我不认为MVC会改变任何东西或帮助你构建更好或更强大的系统。 3层架构是成功且充足的系统。我/你可以在其中构建非常全面和强大的系统。我们都知道复杂或现实生活中的网站需要在所有层之间进行大量的交互。我个人认为php出于这个原因有优势.net。如果你问一个书呆子嚣张的傲慢的程序员在.net中构建一个简单的论坛系统,他会抓住他的头,用它来控制它。然后他将数据网格与一些转发器结合起来...但是如果你只是要求添加评论部分或图像,他会像我这样做的那样?另一方面在php ...你可以将html与服务器代码混合以轻松实现任何表示层...所以不要吹嘘架构,因为它们有相同的优点和缺点。但问你有什么建构?

相关问题