147

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

干杯

4

13 回答 13

104

N 层架构通常具有由网络分隔的每一层。IE表示层在一些Web服务器上,然后通过网络与后端应用程序服务器进行业务逻辑通信,然后再通过网络与数据库服务器通信,并且可能应用程序服务器还调用一些远程服务(说 Authorize.net 进行付款处理)。

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

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

于 2009-03-30T17:42:14.180 回答
46

如果 3 层设计是这样的:

Client <-> Middle <-> Data

MVC 模式将是:

     Middle
     ^    |
     |    v
Client <- Data

意思是:

  • 在 3 层等效中,层之间的通信是双向的,并且总是通过中间层
  • 在 MVC 等效项中,通信是单向的;我们可以说每个“层”都由左边的那个更新,然后又更新右边的那个——其中“左”和“右”只是说明性的

PS客户端将是视图中间控制器

于 2010-07-14T15:50:26.433 回答
32

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

乍一看,这三层似乎类似于 MVC(模型视图控制器)的概念;但是,在拓扑上它们是不同的。三层架构中的一个基本规则是客户端层从不直接与数据层通信。在三层模型中,所有通信都必须通过中间件层。从概念上讲,三层架构是线性的。但是,MVC 架构是三角形的:View 向 Controller 发送更新,Controller 更新 Model,而 View 直接从 Model 更新。

于 2010-01-04T15:19:27.553 回答
18

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

于 2011-03-23T17:17:24.530 回答
6

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

它是线性架构。这解决了如何在用户和数据库之间传递信息的问题。MVC 是三角架构:View 向 Controller 发送更新,Controller 更新 Model,View 直接从 Model 更新。这解决了用户界面如何管理屏幕上的组件的问题。

于 2010-02-16T10:10:24.390 回答
6

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

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

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

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

于 2010-11-16T06:33:33.580 回答
6

让自己休息一下。在解决实际问题时,不要将自己限制在某些模式中。只要记住一些一般原则,其中之一就是关注点分离

于 2014-12-18T09:33:03.223 回答
5

N 层架构最好使用部署图来定义。

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

两者不同且不相关,您可以将两种架构组合在一起。许多公司已采取措施创建 N 层架构,不仅用于部署和可扩展性,还用于代码重用。

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

于 2010-12-28T16:20:04.813 回答
5

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

于 2011-07-18T18:47:18.677 回答
3

结论:N-tier 是一种架构,MVC 是一种设计模式。它们是应用于两个不同领域的相同隐喻。

于 2010-12-29T08:51:03.630 回答
2

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


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


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


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

于 2009-09-14T14:29:11.277 回答
2

在三层模型中,所有通信都必须通过中间层。从概念上讲,三层架构是线性的。然而,[model-view-controller] MVC 架构是三角形的:视图向控制器发送更新,控制器更新模型,视图直接从模型中更新。

于 2016-05-26T10:29:29.877 回答
0

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

  • 表示层呈现相关的 UI,
  • 业务层包含相关的逻辑和
  • 然后是数据访问层。

所有数据都通过中间层进行通信。演示文稿 <-> 业务 <-> 数据。

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

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

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

于 2021-10-28T12:01:48.327 回答