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

时间:2010-05-28 17:03:25

标签: php asp.net asp.net-mvc n-tier-architecture

我之前曾问过类似的问题并得到了令人信服的答案?

What is difference of developing a website in MVC and 3-Tier or N-tier architecture?

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

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

What is the best design pattern to design the interface of an WebPage?

现在我很困惑,第一篇文章建议我两者都相似,只是区别在于N层,层在物理上和逻辑上是分开的,一层可以访问它上面和下面的层而不是所有层

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

我只想坚持最适合WebProject开发的模式?可能这是一个非常愚蠢的混乱?但是,如果有人能够清除这种混乱,那会非常好吗?

6 个答案:

答案 0 :(得分:8)

它们不是相互排斥的。模型 - 视图 - 控制器模式实际上是一种用户界面设计模式,它涉及逻辑层而不是物理层。

我经常听到“n层架构”用于描述应用程序层的实际物理分离。例如,用户界面在一个进程中运行的系统,与在另一个进程(可能在另一个服务器上)执行的应用程序层(可能通过消息传递或Web服务)交换数据,进而访问运行的数据层在另一个进程(通常是数据库服务器)中。

这种描述可能特别令人困惑,因为“应用程序逻辑”可能意味着多种因素:在n层系统中,它通常意味着业务逻辑 - 而不是用户界面逻辑(例如,当用户选择特定复选框时启用哪些小部件)。

例如,在n层系统中,表示层可能会调用接受项ID的Web服务方法。 Web服务在不同的服务器上运行,执行复杂的计算并返回价格。

在更简单的体系结构中,您的应用程序可能会在与用户界面相同的过程中计算项目的价格 - 尽管定价逻辑可能会分成自己的逻辑层(可能在库或可执行文件中)

我想不出任何关注他们的图层是否在不同的物理过程中运行的当前MVC框架。

答案 1 :(得分:3)

  

我只想坚持一种模式   最适合WebProject   发展?可能这是一个非常   愚蠢的混乱?但如果有人可以   清除这种混乱,那将是   非常好吗?

我认为你的困惑在于两个方面:

1)假设每个问题都有一个解决方案。

您项目的要求将决定哪种解决方案最佳。

2)应用于Web时MVC的定义与最初应用于桌面应用程序时的定义不同。

有些人说,如果视图不与模型对话,那么它就不能成为MVC。好吧,大多数Web MVC实现都没有与模型进行视图对话,但它仍然被称为MVC。

由于你是一个自称为业余爱好者的人,你应该尽早接受这个公理:编程世界一直让每个人都感到困惑。

答案 2 :(得分:2)

您可能希望查看Microsoft Application Architecture Guide.从架构的角度来看,它可以很好地概述可用的Microsoft技术。您可能感兴趣的章节:

  • Chp 21设计Web应用程序
  • 附录B:演示技术矩阵
  • 附录C:数据访问技术矩阵

至于什么是最好的?你必须自己回答。使用MVC,WebForms等制作一些示例项目。

答案 3 :(得分:1)

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

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

所吸取的教训是,您对自己的架构进行标记并不重要。有很多MVC / 3层的变种,通常人们只是将它们归结为“MVC”毯子。所有这些都适合Web开发。我只是想不出任何实用的方法让Model通过服务器端编程实际通知View(至少不是在PHP中)。如果您需要这种行为,您应该编写桌面应用程序。只要写出对你来说很自然的事情,不要陷入术语辩论中。看看CodeIgniter,Kohana,Symfony,CakePHP和Zend等一些众所周知的框架,选择你喜欢的功能或设计模式。

答案 4 :(得分:0)

为什么不同时使用? 目前,我正忙着使用MVP模式和N层架构开发项目。 我在用户界面项目中使用MVP模式,即。网站。需要在网站上显示和使用的所有数据都是从Web服务传递的。此Web服务连接到业务层(BLL),该层连接到数据访问层(DAL)。 DAL使用实体框架连接到数据库。

所以在这个项目中,我正在使用它们。但是使用MVP而不是MVC。 通过这种方式,界面项目(网站)不必执行硬件操作,只传递从Web服务接收的一些数据。花了我一段时间来设置,但它的工作非常精彩。

此外,没有真正的答案,哪种模式或架构是最好的。这一切都取决于你想要什么和需要什么。如果您想要可扩展,那么n层架构是一个很好的解决方案。如果您希望能够非常轻松地测试UI,MVC模式也很好。只要你知道如何使用它们,还有很多其他模式和架构也足够了。

答案 5 :(得分:0)

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

MVC Vs n-tier architecture