MVC和3层架构之间的基本区别是什么?
Answers:
在较大的应用程序中,MVC仅是N层体系结构的表示层。模型视图和控制器仅与表示有关,并利用中间层用来自数据层的数据填充模型。
MVC也可以用作整个3层体系结构,其中视图是您的演示文稿,控制器是您的业务逻辑,模型是您的数据层(通常由DAL(例如,实体框架)生成)。
理想情况下,尽管您希望控制器既瘦又笨,但将逻辑传递给“业务组件”,这实际上将成为您的中间层。
在3层体系结构中,层之间的通信是双向的。在MVC中,通信是单向的。我们可以说每个“层”都由左侧的一个层更新,然后又由右侧的一个层进行更新,其中“左”和“右”仅是示例性的。
3层体系结构通常作为3个独立的进程部署在3个独立的网络节点上。但是MVC旨在作为单个进程部署在单个网络节点中。(如桌面应用程序)
3层中的业务层通常包含不同的层,这些层实现了著名的模式,例如业务代表,业务外观,业务对象,服务定位器,数据传输对象等。但是MVC本身是一种用于表示层的设计模式。
3层的目标是将业务逻辑与客户端和数据库分离,从而提供多种客户端协议,高可伸缩性,异构数据访问等。但是MVC的主要目标是,实现更改的一部分不需要更改另一部分。
与迈克尔在回应中所说的相比,我采取了不同的方法。
控制器决不是您的业务逻辑。对我来说,业务逻辑属于模型层。尽管视图(在某种程度上是控制器)和表示层的一部分,模型在MVC应用程序中也永远不会成为模型的一部分。模型应该是MVC应用程序的心脏和灵魂,这就是可以在MVC应用程序中轻松实现的域驱动设计的全部内容。
请记住,您不必在同一项目中拥有模型(就ASP.NET MVC而言)。它可以驻留在完全不同的项目中,并且仍可以充当应用程序的模型
充当表示层的MVC应用程序只能在具有多个层的大型项目中工作,但不能在3层体系结构中充当仅表示层,这是发问者的要求。
因此,我们可以说,MVC在三层体系结构的三层中占了两层(第三层可能是数据层,这本身并不是MVC体系结构的一部分)。
谢谢。
两者之间没有关系。MVC是表示层模式。整个Model-View-Controller存在于表示层中。
模型是对象保存的数据(通常只是VO),这些数据由View表示或从View填充。
控制器是获取请求(并可以填充模型)并调用服务层的对象。然后获取另一个(或相同的)模型,并将其发送回View。
视图是显示模型的对象,并提供了捕获用户输入的组件。(通常是Web应用程序中的模板引擎,或桌面应用程序中的UI组件)。
在谈论3层(或n层)应用程序时,我们所讨论的是整个应用程序的体系结构,该体系结构由表示层(整个MVC),服务层(业务类)和数据访问层组成。
服务层(及其后面的所有层)都隐藏在MVC的控制器后面。
什么是三层架构?
三层(层)是一种客户端-服务器体系结构,其中用户界面,业务流程(业务规则)以及数据存储和数据访问被开发和维护为独立模块,或者通常在单独的平台上维护。基本上有3层,分别是第1层(表示层,GUI层),第2层(业务对象,业务逻辑层)和第3层(数据访问层)。这些层可以分别开发和测试。
DAL-数据访问层(它具有连接字符串以及数据读取和执行过程)
BOL-业务对象层(具有查询)
UI-用户界面(表格和代码后面)
更多详细信息:3层建筑
IMO在3-Tier体系结构和MVC之间没有直接比较。两者都结合使用,因此我们倾向于通过相同的镜头看到它们。从概念上讲,它们不需要一起使用。我可能拥有不使用MVC提供的功能的3层架构。
我没有详细说明定义部分,而是简而言之:
3-Tier是一种软件体系结构方法,其中用户界面,业务流程是逻辑的,数据层是独立开发的,通常是在单独的平台上开发的。
在一段时间内, MVC已从软件模式演变为体系结构模式,并且在当今的所有主要框架中都可以看到。
3层架构是线性的,其中客户端层实际上从未与数据层进行通信-所有通信都通过中间层进行。另一方面,MVC是三角形的,其中视图将更新发送到控制器,并从模型接收更新,并且控制器更新模型。
(请参阅http://en.wikipedia.org/wiki/3-tier_architecture上的“与MVC架构的比较” )
每个应用程序都具有以下多个功能:1)表示层或UI层2)业务层或业务逻辑层3)数据访问层或数据层
3层体系结构通常使每个层都被网络分隔开。IE表示层位于某些Web服务器上,然后通过网络与后端应用程序服务器进行业务逻辑对话,然后又通过网络与数据库服务器进行对话,也许该应用程序服务器还调出了一些远程服务器服务(例如Authorize.net进行付款处理)。
有时我们需要更多的上述类型的层和更多的机械,然后称为N层
MVC是一种编程设计模式,其中代码的不同部分负责表示某些应用程序中的模型,视图和控制器。这两件事是相关的,因为例如模型层可能具有内部实现,该实现调用数据库以存储和检索数据。控制器可以驻留在Web服务器上,并远程调用应用服务器以检索数据。MVC抽象了如何实现应用程序体系结构的细节。 模型在其模型中,我们想建立 视图意味着应用程序的UI 控逆变部件,控制应用程序的逻辑
3层只是指实现的物理结构。由于MVC设计通常是使用3层架构实现的,因此有时会混淆这两者。
在MVC中:MVC体系结构是三角形的:视图将更新发送到控制器,控制器更新模型,并且视图直接从模型更新
在三层中:三层架构是客户端层,从不与数据层直接通信。在三层模型中,所有通信都必须通过中间层
Vikas Joshi软件工程师
我的经验是,MVC只是写得不好的3层的另一个“流行”术语,其中某些通信在业务层周围跳跃,因此客户端和/或数据层也混有业务规则。
我讨厌这样写代码-MVC这个术语必须设计成使HR招聘人员误以为年龄较大的程序员(称为“三层”)不适合这份工作。
我认为MVC不会改变任何东西或帮助您构建更好或更强大的系统。3层架构是成功且足够的系统。我/您可以在其中构建非常全面且强大的系统。我们都知道,复杂或现实生活中的网站需要在所有层次之间进行大量交互。我个人认为php就是出于这个原因。如果您要求一个讨厌的自大的程序员在.net中建立一个简单的论坛系统,他将不知所措。然后,他将把数据网格与一些中继器结合起来...但是稍后,如果您只是简单地要求添加注释部分或图像,他会像我该怎么做?另一方面,在php中... U可以在服务器代码中混合html以轻松实现任何表示层...因此,不要吹嘘架构,因为它们具有相同的优势和劣势。