MVC与n层架构


142

我想知道MVC(一种架构模式)和一个应用程序的n层架构之间到底有什么区别。我进行了搜索,但找不到简单的解释。也许我对MVC概念有些天真,所以如果有人可以解释其中的区别,那就太好了。

干杯

Answers:


94

N层体系结构通常使每一层都被网络分隔开。IE表示层位于某些Web服务器上,然后通过网络与后端应用程序服务器进行业务逻辑对话,然后再次与网络上的数据库服务器进行对话,也许应用程序服务器还调出了一些远程服务(说Authorize.net进行付款处理)。

MVC是一种编程设计模式,其中代码的不同部分负责表示某些应用程序中的模型,视图和控制器。这两件事是相关的,因为例如模型层可能具有内部实现,该实现调用数据库以存储和检索数据。控制器可以驻留在Web服务器上,并远程调用应用服务器以检索数据。MVC抽象了如何实现应用程序体系结构的细节。

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


56
N层也是一种设计模式,您不需要3台服务器即可构成3层系统,实际上,可以使用单个文件来构建n层系统,并通过概念上的概念将各层分开。
magallanes

6
层基本上意味着进程间通信通常在网络链接上进行。我不同意流程中(更不用说在同一文件中)代码设计流程构成了分层设计方法。当然是恕我直言。“服务器”表示该机器可以在同一盒子上运行多个进程;他们甚至可能仍可以在“本地主机”网络上交谈。
Zak

2
讨论的所有格式都是3层设计的示例。不要混淆层和层之间的差异。的确,您可以在物理机器上运行多个层(例如,通过虚拟机监控程序分割大型服务器),但是这里的要点是N-Tier代表物理网络跃点(例如TCP / IP)。在本地,使用命名管道会更有效,但是,再次强调一下,如果您在同一系统上运行,则您将在内存和处理能力上竞争。所有这些都是考虑隔离表示,业务逻辑和数据访问以及不同计算机上的数据库的原因。
Zack Jannsen 2012年

1
我建议任何阅读此问题的人阅读其他答案,此答案不准确
keisar 2014年

@magallanes,使用“ Zak”,首先我们需要清除Tier和Layer之间的区别。这是一篇很好的codeproject文章,其中有明确的解释
Irf,

42

如果三层设计是这样的:

Client <-> Middle <-> Data

MVC模式将是:

     Middle
     ^    |
     |    v
Client <- Data

意思是:

  • 在等效的3层中,层之间的通信是双向的,并且始终通过中间层
  • 在MVC等效中,通信是单向的 ; 我们可以说每个“层”都由左侧的一个层更新,然后又由右侧的一个更新 –其中“左”和“右”仅是示例性的

PS 客户端将成为视图并成为控制器的中间部分


13
在MVC中,模型可以直接与客户端(视图)交互吗?我不这么认为!
palAlaa 2011年

6
@Alaa,我同意,这就是为什么我认为它指的是数据流。更新:我刚刚在Wikipedia中签到,该模型可以通过观察者(而不是直接)与View进行交互。
无效

1
在MVC中:MVC体系结构是三角形的:视图将更新发送到控制器,控制器更新模型,并且视图直接从模型中更新。在三层结构中:三层体系结构是客户端层从不与数据层直接通信在三层模型中,所有通信都必须通过中间层
ketan italiya 2013年

1
在这里,如果Middle是控制器,则如ans中所述,Middle,Client和Middle,Data之间的通信是双向的而不是单向的。控制器将数据传递给模型,模型将更新后的数据返回给控制器,然后将其返回给浏览器经过视图后。

30

这就是关于n层架构的说法

乍一看,这三个层次似乎与MVC(模型视图控制器)概念相似。但是,在拓扑上它们是不同的。三层体系结构中的一个基本规则是,客户端层永远不会直接与数据层通信。在三层模型中,所有通信都必须通过中间件层。从概念上讲,三层体系结构是线性的。但是,MVC体系结构是三角形的:视图将更新发送到控制器,控制器更新模型,视图直接从模型更新。


11
听起来不错,但我不认为“直接从模型中更新视图”是个好主意。使用Controller进行更新和插入没有意义,而对于选择和过滤器则没有意义,而且我也看不到关注点分离点,无论如何只能将视图绑定到模型!结论-MVC是....造成的另一种混淆。我不记得3层曾经局限于“系统架构”或“应用程序设计”。中心概念是关注点分离
山姆

1
这将取决于您在做什么。适用于iOS应用程序的MVC应用程序(可能不允许直接从模型更新视图)将不同于Web应用程序(可能如此)。MVC是一种范例,而不是一种绝对的处理方式。
戴夫·坎特

2
@山姆完全同意。太多的行话无法表达一个直观的概念。
smwikipedia 2014年

1
听起来不错,不起作用。维基百科不是真理的最终来源
ACV

它是您解释真相的方式,并且再次取决于您的目标
Xinus

17

唯一的相似之处在于,这两种模式在它们的图中都有三个框。从根本上说,它们的用途完全不同。如果确实如此,通常不是在使用哪种模式之间进行选择,而是可以将两种模式和谐地结合使用。这是两者的良好比较:http : //allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
我认为这是迄今为止最好的答案,尤其是当MVC确实专注于UI时,它可以是3层设计中的UI层。链接中的图很好地说明了这一点。
亚历克斯(Alex)

5

三层体系结构中的一个基本规则是,客户端层永远不会直接与数据层通信。在三层模型中,所有通信都必须通过中间件层。

它是班轮架构。这解决了如何在用户和数据库之间传递信息的问题。MVC是一个三角体系结构:视图将更新发送到控制器,控制器更新模型,视图直接从模型更新。这解决了用户界面如何管理屏幕上的组件的问题。


5

@Cherry中间件的工作方式更像是MVC模式中的请求处理程序或重定向器。

我想解释一下MVC,据我说,模型视图控制器的工作原理是这样的。

  1. 客户端通过请求任何服务来启动会话。
  2. 该请求由控制器接收并处理(请求处理程序,重定向器等)
  3. 控制器处理有关请求的基本信息,然后将其重定向到可以填充数据请求的相关模型。
  4. 模型根据Controller传递的参数填写请求,然后将结果发送回Controller。(注意:这里我想清除的是,数据不是在真正的MVC体系结构中直接返回到客户端,而是填充并返回到控制器。)
  5. 控制器然后将数据发送到View(Client)。
  6. 客户在他面前有所需的服务。

我所知道的就是关于MVC的全部内容。


1
我认为,就像上面所说的,MVC是三角形的,因此视图有时可以直接与模型对话,反之亦然,如本文档所述:msdn.microsoft.com/zh-cn/library/ms978748.aspx
ychaouche

5

休息一下。解决现实问题时,不要将自己局限于某些模式。只要记住一些一般原则,其中之一就是忧虑分离


4

除了是线性的,这里还没有充分强调的另一个主要区别是,在N层模型中,N不一定是3层!它通常实现为三层(表示,应用程序,数据),中间层具有两个子层(业务逻辑和数据访问)。而且,MVC中的模型可以包含数据和用于数据操作的业务逻辑,而这些逻辑将位于n层的单独层中。


3

最好使用部署图定义N层体系结构。

最好使用序列图定义MVC架构。

这两个是不相同的,也不相关,您可以将两种体系结构结合在一起。许多公司已采取步骤创建N层架构,不仅用于部署和可伸缩性,而且还用于代码重用。

例如,您的业务实体对象可能需要由台式机应用程序,为客户端公开的Web服务,Web应用程序或移动应用程序使用。简单地使用MVC方法根本无法帮助您重用任何东西。


如果mvc在给定的情况下不重用任何东西,那么与n层架构相比,mvc有什么好处。
2015年

2

结论:N层是体系结构,MVC是设计模式。它们是应用于两个不同领域的相同隐喻。


1

杰里:这是一个简单的例子,说明两者之间的关系:


第1层 -包括通过某种网络服务或类似网络与第2层通信的模型,控制器来处理输入验证,计算以及与视图相关的其他事项。它当然包含视图本身-可以是桌面应用程序中的GUI,也可以是Web应用程序中的Web界面。


第2层 -包含从第1层接收消息的某种服务或其他方式。不知道/不应该知道第1层,因此只能接听来自上层的电话-绝不自行询问。还包含所有业务逻辑。


第3层 -包含域模型,数据库的对象表示形式以及所有用于通信和更新数据库条目的逻辑。


1

在三层模型中,所有通信都必须经过中间层。从概念上讲,三层体系结构是线性的。但是,[model-view-controller] MVC体系结构是三角形的:视图将更新发送到控制器,控制器更新模型,并且视图直接从模型中更新。


实际上,它不是MVC,而是MVVMC。我看到MVC或MVVMC只是一个表示层,因为我看到该控制器只是视图和BLL之间的中间件。这就是我将如何维护它,以便可以将BLL用作库来为不同平台创建UI。这是带有asmx支持的aspx.cs。我有时觉得MVC是组织项目文件夹中文件的一种不好的方式,这有点难以理解,因为所有控制器都位于同一级别,并且视图位于子文件夹中。我也可以为控制器创建子文件夹,但它的工作重复。
Nithin B
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.