MVC对n层架构

Arn*_*shn 140 model-view-controller n-tier-architecture

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

干杯

Zak*_*Zak 93

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

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

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

  • N层也是一种设计模式,你不需要3台服务器来做3层系统,事实上,有可能使用单个文件做一个n层系统,用概念概念分隔每一层. (53认同)
  • 层基本上意味着进程间通信通常发生在网络链路上.我不同意在进程中(更不用说在同一个文件中)代码设计流程构成了分层设计方法.当然那是恕我直言."服务器"意味着机器可以在同一个盒子上运行多个进程; 他们甚至可能仍然在"localhost"网络上谈论. (5认同)
  • 讨论的所有格式都是 3 层设计的示例。不要混淆层和层之间的区别。确实,您可以在物理机器上运行多个层(例如,您通过管理程序划分大型服务器),但这里的重点是 N 层暗指物理网络跃点(例如 TCP/IP)。在本地使用命名管道会更有效,但同样,如果您在同一系统上运行,您将在内存和处理能力方面进行竞争。所有这些都是考虑在不同机器上隔离表示、业务逻辑和数据访问以及数据库的原因。 (2认同)

voi*_*oid 41

如果3层设计是这样的:

Client <-> Middle <-> Data
Run Code Online (Sandbox Code Playgroud)

MVC模式将是:

     Middle
     ^    |
     |    v
Client <- Data
Run Code Online (Sandbox Code Playgroud)

意思是:

  • 在3层等价物中,层之间的通信是双向的,并且总是通过中间层
  • 在MVC等价物中,通信是单向的 ; 我们可以说每个"层"由左边的那个更新,然后更新右边的那个 - "左"和"右"只是说明

PS 客户端将是查看中东控制器

  • 在MVC中,模型可以直接与客户端(视图)进行交互吗?我不这么认为! (11认同)
  • @Alaa,我同意,这就是为什么我_think_它指的是数据流.更新:我刚刚在维基百科中查看,模型可以通过观察者(而不是直接)与View进行交互. (6认同)

Xin*_*nus 30

这是什么 说关于n层架构

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

  • 听起来不错,但我不相信"View直接从模型中更新"是一个好主意.使用Controller进行更新和插入是没有意义的,但是对于选择和过滤器没有意义,我不认为关注点的分离只是为了将视图绑定到模型上!结论 - MVC是另一个由......创建的混淆猜测.我不记得3层有限于"系统架构"或"应用程序设计".中心概念是**关注点分离**. (10认同)
  • @Sam 完全同意。对于一个直观的概念来说,术语太多了。 (3认同)

小智 16

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

  • 我认为这是迄今为止最好的答案,特别是因为MVC真的专注于UI,它可以是3层设计中的UI层.链接中的图表非常清楚地说明了这一点. (3认同)

小智 5

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

这是班轮架构.这解决了如何在用户和数据库之间传递信息的问题.MVC是三角形体系结构的地方:View向Controller发送更新,Controller更新模型,View直接从模型更新.这解决了用户界面如何管理屏幕上的组件的问题.


Aqe*_*mad 5

@Cherry Middle ware更像是MVC Pattern中的请求处理程序或重定向程序.

我想解释一下MVC,根据我的模型视图控制器的工作原理如下.

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

这就是我所知道的MVC.


Ed *_*gne 5

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

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

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

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


Alk*_*ema 5

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


smw*_*dia 5

给自己一个休息时间.在解决现实问题时,不要局限于某些模式.请记住一些一般原则,其中之一就是分离关注.