MVC VS n 层架构

我想知道 MVC (一种架构模式)和应用程序的 n 层架构到底有什么不同。我寻找它,但找不到一个简单的解释。也许我在 MVC 概念上有点天真,所以如果有人能够解释这种区别,那就太好了。

干杯

90825 次浏览

N 层体系结构通常具有由网络分隔的各层。也就是说,表示层位于某些 Web 服务器上,然后通过网络与后端应用服务器进行业务逻辑对话,然后再通过网络与数据库服务器对话,也许应用服务器还会调用某些远程服务(比如用于支付处理的 Authorize.net)。

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

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

杰瑞: 这里有一个简单的例子来说明这两者是如何联系在一起的:


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


第2层 -包含某种服务或以其他方式接收来自第1层的消息。不知道/不应该知道第一层,所以只能回答来自上面的呼吁-永远不要要求本身的东西。还包含所有业务逻辑。


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

这就是 译自: 美国《科学》杂志网站(http://www.veryicon.com/icon/view/Apollo/Wikipedia% 2520Icon.jpg)所说的 n 层架构

乍一看,这三层楼可能 似乎类似于 MVC (模型视图 控制器)概念; 然而, 它们在拓扑结构上是不同的 基本原则 架构是客户端层从来没有 直接与数据通信 在一个三层模型中 通讯必须通过 中间件层。概念上的 三层架构是线性的。 然而,MVC 架构是 三角形: 视图将更新发送到 控制器,控制器更新 模型,并且视图得到更新 直接从模型。

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

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

如果一个三层设计是这样的:

Client <-> Middle <-> Data

MVC 模式是:

     Middle
^    |
|    v
Client <- Data

意思是:

  • 在3层等效中,层之间的通信是 双向的总是通过中间层
  • 在等价的 MVC 中,通信是在 单向的中进行的; 我们可以说 每个“图层”由左边的图层更新,然后再由右边的图层更新-其中“ left”和“ right”仅仅是说明性的

附注 客户观景 中间控制员

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

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

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

这就是我所知道的车祸事故。

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

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

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

例如,您的 Business Entity 对象可能需要被桌面应用程序、为客户端公开的 Web 服务、 Web 应用程序或移动应用程序使用。简单地使用 MVC 方法根本不会帮助您重用任何东西。

结论: N 层是一种体系结构,MVC 是一种设计模式,它们在两个不同的领域具有相同的比喻。

唯一的相似之处是这两种模式的图表中有三个框。从根本上说,它们的用途完全不同。如果事实上,它通常不是一个选择之间的模式使用,但两种模式可以一起使用和谐。下面是两者的一个很好的比较: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

这个图表展示了如何将两种模式结合使用,MVC 仅在演示/用户界面层中使用:

mvc3tiercombo

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

让自己休息一下。在解决现实世界的问题时,不要把自己局限于某些模式。只要记住一些基本原则,其中之一就是 关注点分离

N 层架构从不直接与数据访问层通信:

  • 表示层显示相关的用户界面,
  • 业务层包含相关的逻辑和
  • 然后是数据访问层。

所有数据都通过中间层进行通信。

MVC (模型-视图-控制器)体系结构是三角形的。

  • 视图向控制器发送更新,
  • 控制器更新模型和
  • 然后视图直接从模型获得更新。

模型(数据) ,视图(UI) ,控制器(逻辑)。