MVC与3层架构?


Answers:


33

3层体系结构样式MVC设计模式

所以不同。

但是我们可以在3层架构样式中使用mvc模式。

所以:

表示层:来自MVC模式的“控制器和视图”。

业务层 :来自MVC模式的“模型(数据)”。

数据访问层:原始数据访问层。


21
仅仅说“ 3层是体系结构样式而MVC是设计模式”还不够。MVC是属于“建筑模式”组的一种设计模式。
罗纳德

10
实际上,MVC是体系结构模式,而不是设计模式。
apxcode

32

在较大的应用程序中,MVC仅是N层体系结构的表示层。模型视图和控制器仅与表示有关,并利用中间层用来自数据层的数据填充模型。

MVC也可以用作整个3层体系结构,其中视图是您的演示文稿,控制器是您的业务逻辑,模型是您的数据层(通常由DAL(例如,实体框架)生成)。

理想情况下,尽管您希望控制器既瘦又笨,但将逻辑传递给“业务组件”,这实际上将成为您的中间层。


4
如果View = Presentation,Controller = Business和Model = DAL那么它们之间的基本区别是什么?哪个更好,为什么?
chhaya 2011年

1
MVC可以说是三层体系结构的实现,但是它本身也可以是顶层。
Michael Shimmins 2011年

11
我同意你的第一段,但不同意你的第二段。BL应该不会是在控制器中。力求包含BL和精益控制器的健壮模型。
atconway 2012年

18

在3层体系结构中,层之间的通信是双向的。在MVC中,通信是单向的。我们可以说每个“层”都由左侧的一个层更新,然后又由右侧的一个层进行更新,其中“左”和“右”仅是示例性的。

3层体系结构通常作为3个独立的进程部署在3个独立的网络节点上。但是MVC旨在作为单个进程部署在单个网络节点中。(如桌面应用程序)

3层中的业务层通常包含不同的层,这些层实现了著名的模式,例如业务代表,业务外观,业务对象,服务定位器,数据传输对象等。但是MVC本身是一种用于表示层的设计模式。

3层的目标是将业务逻辑与客户端和数据库分离,从而提供多种客户端协议,高可伸缩性,异构数据访问等。但是MVC的主要目标是,实现更改的一部分不需要更改另一部分。


12

与迈克尔在回应中所说的相比,我采取了不同的方法。

控制器决不是您的业务逻辑。对我来说,业务逻辑属于模型层。尽管视图(在某种程度上是控制器)和表示层的一部分,模型在MVC应用程序中也永远不会成为模型的一部分。模型应该是MVC应用程序的心脏和灵魂,这就是可以在MVC应用程序中轻松实现的域驱动设计的全部内容。

请记住,您不必在同一项目中拥有模型(就ASP.NET MVC而言)。它可以驻留在完全不同的项目中,并且仍可以充当应用程序的模型

充当表示层的MVC应用程序只能在具有多个层的大型项目中工作,但不能在3层体系结构中充当仅表示层,这是发问者的要求。

因此,我们可以说,MVC在三层体系结构的三层中占了两层(第三层可能是数据层,这本身并不是MVC体系结构的一部分)。

谢谢。


9

两者之间没有关系。MVC是表示层模式。整个Model-View-Controller存在于表示层中。

  • 模型是对象保存的数据(通常只是VO),这些数据由View表示或从View填充。

  • 控制器是获取请求(并可以填充模型)并调用服务层的对象。然后获取另一个(或相同的)模型,并将其发送回View。

  • 视图是显示模型的对象,并提供了捕获用户输入的组件。(通常是Web应用程序中的模板引擎,或桌面应用程序中的UI组件)。

在谈论3层(或n层)应用程序时,我们所讨论的是整个应用程序的体系结构,该体系结构由表示层(整个MVC),服务层(业务类)和数据访问层组成。

服务层(及其后面的所有层)都隐藏在MVC的控制器后面。


7

什么是三层架构?

三层(层)是一种客户端-服务器体系结构,其中用户界面,业务流程(业务规则)以及数据存储和数据访问被开发和维护为独立模块,或者通常在单独的平台上维护。基本上有3层,分别是第1层(表示层,GUI层),第2层(业务对象,业务逻辑层)和第3层(数据访问层)。这些层可以分别开发和测试。

DAL-数据访问层(它具有连接字符串以及数据读取和执行过程)

BOL-业务对象层(具有查询)

UI-用户界面(表格和代码后面)

更多详细信息:3层建筑


2
好吧,除了充其量只是问题的一半。你可以三角洲MVC吗?
ruffin 2012年

这个答案与问题无关。这个说只有3层。
Dinuka Thilanga

7

IMO在3-Tier体系结构和MVC之间没有直接比较。两者都结合使用,因此我们倾向于通过相同的镜头看到它们。从概念上讲,它们不需要一起使用。我可能拥有使用MVC提供的功能的3层架构。

我没有详细说明定义部分,而是简而言之:

3-Tier是一种软件体系结构方法,其中用户界面,业务流程是逻辑的,数据层是独立开发的,通常是在单独的平台上开发的。

在一段时间内, MVC已从软件模式演变为体系结构模式,并且在当今的所有主要框架中都可以看到。


同意,它们是正交的,但是互补的。
Martin Spamer

6

3层架构是线性的,其中客户端层实际上从未与数据层进行通信-所有通信都通过中间层进行。另一方面,MVC是三角形的,其中视图将更新发送到控制器,并从模型接收更新,并且控制器更新模型。

(请参阅http://en.wikipedia.org/wiki/3-tier_architecture上的“与MVC架构的比较” )


3
我相信您从Wikipedia复制了此答案。引用您的来源更好。“使用MVC架构检查比较”段落@ en.wikipedia.org/wiki/3-tier_architecture
克里斯

6

每个应用程序都具有以下多个功能:1)表示层或UI层2)业务层或业务逻辑层3)数据访问层或数据层

3层体系结构通常使每个层都被网络分隔开。IE表示层位于某些Web服务器上,然后通过网络与后端应用程序服务器进行业务逻辑对话,然后又通过网络与数据库服务器进行对话,也许该应用程序服务器还调出了一些远程服务器服务(例如Authorize.net进行付款处理)。

有时我们需要更多的上述类型的层和更多的机械,然后称为N层

MVC是一种编程设计模式,其中代码的不同部分负责表示某些应用程序中的模型,视图和控制器。这两件事是相关的,因为例如模型层可能具有内部实现,该实现调用数据库以存储和检索数据。控制器可以驻留在Web服务器上,并远程调用应用服务器以检索数据。MVC抽象了如何实现应用程序体系结构的细节。 模型在其模型中,我们想建立 视图意味着应用程序的UI 控逆变部件,控制应用程序的逻辑

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


4

在MVC中:MVC体系结构是三角形的:视图将更新发送到控制器,控制器更新模型,并且视图直接从模型更新

在三层中:三层架构是客户端层,从不与数据层直接通信。在三层模型中,所有通信都必须通过中间层

Vikas Joshi软件工程师


3

我的经验是,MVC只是写得不好的3层的另一个“流行”术语,其中某些通信在业务层周围跳跃,因此客户端和/或数据层也混有业务规则。

我讨厌这样写代码-MVC这个术语必须设计成使HR招聘人员误以为年龄较大的程序员(称为“三层”)不适合这份工作。


2
这个答案是面试中发生的事情的一个很好的例子。我没有得到这份工作的主要原因之一是因为我不知道MVC是什么,但是已经对三层程序进行了十多年的编程。在研究了MVC之后,总共分为三层。就像该用户指出的那样,IMO三层优于MVC,MVC只是一团糟
K3NN3TH 2015年

完全同意你。再加上一点,由于三角形的交互作用,许多Web框架都有自己的“ MVC”处理方式,这引起了很多混乱。
haotang

2
  • 3层是线性架构。(表示层->逻辑层->数据层,然后是数据层->逻辑层->表示层)但是MVC是三角形体系结构。(控件更新视图和模型。模型更新视图。)
  • MVC可以在3层体系结构中包括表示层(移动应用程序,Angular,如js框架等)和逻辑层(J2EE,Laravel等)。
  • 3层中的层可以在不同的网络节点中实现。但通常,MVC中的元素在同一网络节点中实现。

-8

我认为MVC不会改变任何东西或帮助您构建更好或更强大的系统。3层架构是成功且足够的系统。我/您可以在其中构建非常全面且强大的系统。我们都知道,复杂或现实生活中的网站需要在所有层次之间进行大量交互。我个人认为php就是出于这个原因。如果您要求一个讨厌的自大的程序员在.net中建立一个简单的论坛系统,他将不知所措。然后,他将把数据网格与一些中继器结合起来...但是稍后,如果您只是简单地要求添加注释部分或图像,他会像我该怎么做?另一方面,在php中... U可以在服务器代码中混合html以轻松实现任何表示层...因此,不要吹嘘架构,因为它们具有相同的优势和劣势。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.