【发布时间】:2010-10-16 10:35:30
【问题描述】:
我想知道 MVC(这是一种架构模式)和应用程序的 n 层架构之间到底有什么区别。我搜索了它,但找不到简单的解释。可能是我对 MVC 概念有点天真,所以如果有人能解释其中的区别,那就太好了。
干杯
【问题讨论】:
标签: model-view-controller n-tier-architecture
我想知道 MVC(这是一种架构模式)和应用程序的 n 层架构之间到底有什么区别。我搜索了它,但找不到简单的解释。可能是我对 MVC 概念有点天真,所以如果有人能解释其中的区别,那就太好了。
干杯
【问题讨论】:
标签: model-view-controller n-tier-architecture
N 层架构通常具有由网络分隔的每一层。 IE。表示层在一些 Web 服务器上,然后通过网络与后端应用服务器进行业务逻辑通信,然后再通过网络与数据库服务器进行通信,并且可能应用服务器还调用一些远程服务(例如Authorize.net 进行付款处理)。
MVC 是一种编程设计模式,其中不同部分的代码负责表示某些应用程序中的模型、视图和控制器。这两件事是相关的,因为例如模型层可能有一个内部实现,它调用数据库来存储和检索数据。控制器可以驻留在网络服务器上,并远程调用应用服务器来检索数据。 MVC 抽象出应用程序架构如何实现的细节。
N 层仅指实现的物理结构。这两者有时会混淆,因为 MVC 设计通常是使用 N 层架构实现的。
【讨论】:
如果 3 层设计是这样的:
Client <-> Middle <-> Data
MVC 模式是:
Middle
^ |
| v
Client <- Data
意思是:
附: Client 将是 View 和 Middle Controller
【讨论】:
这就是 对n-tier architecture 的评价
乍一看,这三层可能 看起来类似于 MVC(模型视图 控制器)概念;然而, 在拓扑上它们是不同的。一种 三层的基本规则 架构永远是客户层 直接与数据通信 层;在三层模型中 通讯必须通过 中间件层。从概念上讲 三层架构是线性的。 然而,MVC 架构是 三角形:视图将更新发送到 控制器,控制器更新 模型和视图得到更新 直接来自模型。
【讨论】:
唯一的相似之处是这两种模式在它们的图表中都有三个框。从根本上说,它们的用途完全不同。事实上,使用哪种模式通常不是一个选择,但两种模式可以和谐地一起使用。这是两者的一个很好的比较:http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html
【讨论】:
三层架构的一个基本规则是客户端层从不直接与数据层通信;在三层模型中,所有通信都必须通过中间件层。
这是线性架构。这解决了如何在用户和数据库之间传递信息的问题。 MVC 是三角架构:View 向 Controller 发送更新,Controller 更新 Model,View 直接从 Model 中更新。这解决了用户界面如何管理屏幕上的组件的问题。
【讨论】:
@樱桃 中间件更像是 MVC 模式中的请求处理程序或重定向器。
我想解释一下MVC,根据我的模型视图控制器是这样工作的。
这就是我所知道的关于 MVC 的全部内容。
【讨论】:
让自己休息一下。在解决实际问题时,不要将自己限制在某些模式中。请记住一些一般原则,其中之一是关注点分离。
【讨论】:
除了线性之外,这里没有足够强调的另一个主要区别是,在 N 层模型中,N 不一定是 3 层!它通常被实现为三层(表示、应用程序、数据),中间层有两个子层(业务逻辑和数据访问)。此外,MVC 中的模型可以包含数据和用于数据操作的业务逻辑,而这些将位于 n 层中的单独层中。
【讨论】:
最好使用部署图来定义 N 层架构。
最好使用序列图来定义 MVC 架构。
两者不相同且不相关,您可以将两种架构组合在一起。许多公司已采取措施创建 N 层架构,不仅用于部署和可扩展性,还用于代码重用。
例如,您的业务实体对象可能需要由桌面应用程序、为客户端公开的 Web 服务、Web 应用程序或移动应用程序使用。简单地使用 MVC 方法根本不会帮助您重用任何东西。
【讨论】:
结论:N-tier 是一种架构,MVC 是一种设计模式。它们是应用于两个不同领域的同一个隐喻。
【讨论】:
Jerry:这里有一个简单的例子来说明两者之间的关系:
第 1 层 - 由通过某种网络服务或类似服务与第 2 层通信的模型、用于处理输入验证、计算和其他与视图相关的事情的控制器组成。当然,它还包含视图本身——它可以是桌面应用程序中的 GUI,也可以是网络应用程序中的网络界面。
第 2 层 - 包含从第 1 层接收消息的某种服务或其他方式。不/不应该知道第 1 层,因此只能接听来自上面的电话 - 永远不要要求事情本身。还包含所有业务逻辑。
第 3 层 - 包含域模型、数据库的对象表示以及用于通信和更新数据库条目的所有逻辑。
【讨论】:
在三层模型中,所有通信都必须通过中间层。从概念上讲,三层架构是线性的。但是,[model-view-controller] MVC 架构是三角形的:视图向控制器发送更新,控制器更新模型,视图直接从模型中更新。
【讨论】:
N 层架构从不直接与数据访问层通信。在 3 层架构中:
所有数据都通过中间层进行通信。演示文稿 业务 数据。
MVC(模型-视图-控制器)架构是三角形的。
模型(数据)、视图(UI)、控制器(逻辑)。
【讨论】: