我之前曾问过类似的问题并得到了令人信服的答案?
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开发的模式?可能这是一个非常愚蠢的混乱?但是,如果有人能够清除这种混乱,那会非常好吗?
答案 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技术。您可能感兴趣的章节:
至于什么是最好的?你必须自己回答。使用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设计,一个是系统架构。在这里已经提出并回答了区分这两者的问题: