MVC 与 n 层架构

Posted

技术标签:

【中文标题】MVC 与 n 层架构【英文标题】:MVC Vs n-tier architecture 【发布时间】:2010-10-16 10:35:30 【问题描述】:

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

干杯

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

N-tier也是一种设计模式,不需要3台server做3-tier系统,其实用一个文件做n-tier系统是可以的,通过概念概念分隔每一层。 Tier 基本上意味着进程间通信通常通过网络链接发生。我不同意进程内(更不用说在同一个文件中)代码设计流程构成分层设计方法。当然那是恕我直言。 “服务器”意味着机器可以在同一个盒子上运行多个进程;他们甚至可能仍然可以在“localhost”网络上交谈。 所有讨论的格式都是 3 层设计的例子。不要混淆层和层之间的区别。确实,您可以在物理机器上运行多个层(例如,您通过管理程序划分大型服务器),但这里的重点是 N 层对物理网络跃点(例如 TCP/IP)的暗示。在本地,使用命名管道会更有效,但同样,如果您在同一系统上运行,您将争夺内存和处理能力。所有这些都是考虑在不同机器上隔离表示、业务逻辑和数据访问以及数据库的原因。 我建议任何阅读此问题的人阅读其他答案,此答案不准确 @magallanes , Go with 'Zak', 首先我们要明确Tier and Layer 的区别这里很好codeproject article 里面有明确的解释【参考方案2】:

如果 3 层设计是这样的:

Client <-> Middle <-> Data

MVC 模式是:

     Middle
     ^    |
     |    v
Client <- Data

意思是:

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

附: Client 将是 ViewMiddle Controller

【讨论】:

在 MVC 中,模型可以直接与客户端(视图)交互吗???我不这么认为! @Alaa,我同意,这就是为什么我认为它指的是数据流。更新:我刚刚查看了***,模型可以通过观察者(不是直接)与视图交互。 在 MVC 中:MVC 架构是三角形的:视图向控制器发送更新,控制器更新模型,视图直接从模型中更新 在三层中:三层架构是客户端层从不直接与数据层通信在三层模型中,所有通信都必须通过中间层 这里如果 Middle 是一个控制器,那么 Middle、Client 和 Middle 之间的通信,数据是双向的而不是单向的,如 ans 中所述。控制器将数据传递给模型,模型返回更新的数据到控制器,然后在通过视图后将其返回给浏览器。【参考方案3】:

这就是 对n-tier architecture 的评价

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

【讨论】:

听起来不错,但我不相信“视图直接从模型更新”是个好主意。将 Controller 用于更新和插入而不是用于选择和过滤器是没有意义的,而且我看不到分离关注点只是为了将视图绑定到模型!结论 - MVC 是由 .... 创造的另一种混淆。猜一猜。我不记得 3 层曾经仅限于“系统架构”或“应用程序设计”。中心概念是关注点分离 这取决于你在做什么。 ios 应用程序的 MVC 应用程序(可能不允许直接从模型更新视图)与 Web 应用程序(可能)不同。 MVC 是一种范式,而不是一种绝对的做事方式。 @Sam 完全同意。直观概念的行话太多。 听起来不错,但不起作用。***不是最终的真相来源 这是你解释真相的方式,同样取决于你的目标是什么【参考方案4】:

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

【讨论】:

我认为这是迄今为止最好的答案,尤其是 MVC 真正专注于 UI,它可以作为 3 层设计中的 UI 层。链接中的图表很好地说明了这一点。【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

我认为,如上所述,MVC 是三角形的,因此视图有时可以直接与模型对话,反之亦然,如本文所述:msdn.microsoft.com/en-us/library/ms978748.aspx【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

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

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

【讨论】:

如果 mvc 没有为您的给定场景重用任何东西,那么与 n 层架构相比,mvc 有什么好处。【参考方案10】:

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

【讨论】:

【参考方案11】:

Jerry:这里有一个简单的例子来说明两者之间的关系:


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


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


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

【讨论】:

【参考方案12】:

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

【讨论】:

其实不是MVC,是MVVMC。我看到 MVC 或 MVMC 只是一个表示层,因为我看到控制器只是视图和 BLL 之间的中间件。这就是我维护它的方式,以便我可以使用 BLL 作为库来为不同平台创建 UI。这是一种带有 asmx 支持的 aspx.cs。我有时觉得 MVC 是一种在项目文件夹中组织文件的糟糕方式,它有点难以理解,因为所有控制器都位于一个级别,并且视图位于子文件夹中。我也可以为控制器创建子文件夹,但它的工作重复。【参考方案13】:

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

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

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

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

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

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

【讨论】:

以上是关于MVC 与 n 层架构的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC 和 3 层或 N 层架构中开发网站有啥区别?

MVC模式与三层架构的区别

浅析MVC模式与三层架构的区别

三层架构与MVC

MVC 与 3 层架构?

MVC架构与三层架构的关系