什么更好:在MVC或N-Tier架构中开发Web项目?

5

我之前问过一个类似的问题,并得到了令人信服的答案。

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

由于这个问题的结论,我开始使用N层架构开发项目。

就在大约一个小时前,我问了另一个问题,询问创建界面的最佳设计模式是什么?那里得票最多的答案建议我使用MVC架构。

如何设计Web页面的最佳设计模式?

现在我感到困惑了,第一篇文章告诉我两者很相似,只是在N层中,层是物理上和逻辑上分离的,一层可以访问它上面和下面的层,但不是所有层。

我认为ASP.net在开发应用程序或Web应用程序时使用3层架构。而像Zend、Symphony这样的框架则使用MVC。

我只想坚持一个最适合 Web 项目开发的模式,这可能是一个非常愚蠢的困惑?但如果有人能够解决这个困惑,那将非常感激?


1
如果您能更详细地解释一下您所说的“n层”和“MVC”,那么回答会更容易。这两个术语随着时间的推移已经发展演变,并且已经获得了几个含义 - 其中一些是相互排斥的。 - Jeff Sternal
实际上,我对MVC和N层架构都没有很好的理解。 - Starx
最好的设计模式可能是神话,因为在所有情况下都没有完美的东西,以我个人看来。 - JB King
什么更好?用砖头还是木头建房子?答案是:这取决于情况。也许不是你想听到的回答。 - Esteban Araya
没有哪个更好。MVC和n-tier不是二选一的事情。一个是对象/API设计,一个是系统架构。区分这两者的问题已经在这里被提出并回答了:https://dev59.com/-HRB5IYBdhLWcg3wLUq3#698250 - Zak
6个回答

8
他们并不是互斥的。模型-视图-控制器模式实际上是一种用户界面设计模式,它关注的是逻辑层而非物理层。
我经常听到“n层架构”用来描述应用程序层的实际物理分离。例如,一个系统中,用户界面在一个进程中运行,通过消息传递或Web服务与应用程序层交换数据,在另一个进程(可能在另一台服务器上)执行,该应用程序层再访问在另一个进程中运行的数据层(通常是数据库服务器)。
这种描述可能特别令人困惑,因为“应用程序逻辑”可以意味着多个事物:在n层系统中,它通常意味着业务逻辑 - 而不是用户界面逻辑(例如,当用户选择特定复选框时启用哪些小部件)。
例如,在n层系统中,您的表示层可以调用一个接受项目ID的Web服务方法。Web服务在不同的服务器上运行,在那里执行复杂的计算并返回价格。
在更简单的体系结构中,您的应用程序可以在与用户界面相同的进程中计算项目的价格 - 尽管定价逻辑可以分离成自己的逻辑层(可能在库或可执行文件中)。
我想不出任何当前的MVC框架关心它们的层是否在单独的物理进程中运行。

3
我只想采用最适合Web项目开发的模式,也许这是一个非常愚蠢的困惑?但如果有人能够解决这个困惑,那将是非常感激的。我认为你的困惑在以下两个方面:
1)假设每个问题都有一种解决方案,而你的项目需求将决定哪种解决方案最好。
2)将MVC应用于Web时的定义与将其应用于桌面应用程序时不同。
一些人说,如果视图与模型没有交流,则不能被称为MVC。然而,大多数Web MVC实现并不需要视图与模型交流,但仍然被称为MVC。
既然你自己说是业余爱好者,你应该早日接受这个公理:编程世界总是让所有人感到困惑。

2
您可以查看Microsoft应用程序架构指南,该指南从体系结构的角度概述了可用的Microsoft技术。以下章节可能会对您感兴趣:
  • 第21章 设计Web应用程序
  • 附录B:演示技术矩阵
  • 附录C:数据访问技术矩阵
至于什么是最好的?这需要您自己回答。使用MVC、WebForms等制作一些样本项目。

1

基于Web的MVC与传统桌面MVC有很大不同。由于Web(在大多数情况下)是无状态的,因此模型根本没有办法更新视图。

即使您使用AJAX每隔几秒钟轮询服务器以检查模型更新,这仍然不是“真正”的MVC,因为不是模型通知视图,而是控制器不断地“查询”模型。

得出的教训是,实际上标记您的架构并不重要。 MVC / 3层有如此多的变体,通常人们只将它们归为“MVC”范畴。所有这些都适用于Web开发。我只是想不到任何实际的方法来通过服务器端编程使模型实际通知视图(至少不是在PHP中)。如果您需要这种行为,应编写桌面应用程序。只需编写自然的内容,不要陷入术语争论中。查看一些知名框架(如CodeIgniter,Kohana,Symfony,CakePHP和Zend)所做的事情,并选择您喜欢的功能或设计模式。


0

为什么不两者兼顾呢? 目前我正在忙于开发一个项目,使用MVP模式和N层架构。 我在用户界面项目中使用MVP模式,即网站。所有需要显示和在网站中使用的数据都从webservice传递。这个webservice连接到业务层(BLL),业务层连接到数据访问层(DAL)。DAL使用Entity Framework连接到数据库。

因此,在这个项目中我同时使用了它们。只是使用MVP代替MVC。 这样,接口项目(网站)就不必做太多复杂的事情,只需传递一些从webservice接收到的数据即可。花了我一段时间来设置,但效果非常好。

此外,没有真正的答案可以回答哪种模式或架构是最好的。这完全取决于你想要和需要什么。如果你想要可扩展性,N层架构是一个很好的解决方案。如果你想要能够轻松测试你的UI,MVC模式也很好。还有大量其他的模式和架构也可以胜任,只要你知道如何使用它们。


0

没有哪个更好。MVC和n-tier不是二选一的事情。一个是对象/API设计,一个是系统架构。区分这两者的问题已经在这里提出并回答:

MVC Vs n-tier architecture


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接