除了作为一个 30 年的模式之外,MVC 从来都不适用于当前的应用程序。MVP 是它的继任者,旨在处理 90 年代出现的基于事件的应用程序。Passive View 和 Supervising Controller 似乎已经升到了顶峰。对于这两个,几乎没有必要谈论 MVC/MVP。
具体来说,ASP.NET MVC 中的控制器操作是否会带回创建该视图的视图?在 MVC 中,控制器不会创建视图或与它们对话。将 ASP.NET MVC 称为 MVC 实现有多准确?或者,它的准确名称是什么?
除了作为一个 30 年的模式之外,MVC 从来都不适用于当前的应用程序。MVP 是它的继任者,旨在处理 90 年代出现的基于事件的应用程序。Passive View 和 Supervising Controller 似乎已经升到了顶峰。对于这两个,几乎没有必要谈论 MVC/MVP。
具体来说,ASP.NET MVC 中的控制器操作是否会带回创建该视图的视图?在 MVC 中,控制器不会创建视图或与它们对话。将 ASP.NET MVC 称为 MVC 实现有多准确?或者,它的准确名称是什么?
我认为是 Ruby on Rails 启发了 MS 创建 asp.net MVC。
ASP.NET MVC 只是 Microsoft 对在 Ruby on Rails 和 Django 等 Web 框架中成功实现 MVC 的认可。意识到许多 Web 开发人员希望采用更亲力亲为的 Web 开发方法,这种方法包含“固执的”编程模型(约定优于配置)并偏离 ASP.NET WebForms 提供的有状态抽象。
它是 Smalltalk MVC 模式的精确实现吗?不,这是恐慌的结果吗?不。这是 Ruby on Rails 和 Django 都成功的结果吗?是的。
我碰巧喜欢这个模型,因为它包含 .NET 和 ASP.NET 堆栈提供的丰富框架,同时在方法和使用基于约定的开发方面保持简约。
足够接近,这是一种销售策略。
他们将 ASP.NET 与其他自称为 MVC 的技术进行对比。因此,将其命名为在同一类别中被感知是具有竞争力的。
与准确的技术识别相比,微软更经常通过产品定位获胜。(加上长期交货,恕我直言。)
ScottGu 在他关于第一个 MVC 演示的帖子的第一部分中没有找到答案。简短的回答是人们要求它,微软决定接受它。它与当前的 .Net 模型相匹配,可以添加尽可能多的选项,使框架能够达到更大的目标市场,并为开发人员提供适合项目的正确工具。
由 ASP.NET MVC 实现的 MVC 不是旧的 MVC 模式。在我称之为“经典”的 MVC 中,视图可以直接但只读地访问模型,在 ASP.NET MVC 中,直接从视图访问业务模型被认为是一种不好的形式。你最终得到的是非常类似于监督控制器 + 被动视图的东西:
public class MvcExampleController : Controller
{
public ActionResult ActionMethod(BoundInputData inputData)
{
var results = DoActualWorkInTheModelWith(inputData);
var viewModel = CreateViewModelFromThe(results);
return View(viewModel);
}
}
对我来说,这看起来更像是一个监督控制器,而不是经典的 MVC。在模型中完成工作后,视图将传递给 ViewModel(又名 PresentationModel)。ViewModel 通常与视图中的 UI 元素具有 1 对 1 的关系,并且可能看起来或可能不像实际模型中的对象。作用于 ViewModel 而不是实际 Model 的 View 对我来说很像 Passive View。
我不会讨论这是否是“真正的”MVC 实现,但如果您的论点是 ASP.NET MVC 不使用现代 Web 设计模式,我不得不不同意。
最好的猜测,每个人都听说过 MVC。MVC 作为一种“最佳实践”已经被打败了很长一段时间,因此整整一代(或两、三代)开发人员看到 MVC 并产生快乐的想法。
此外,许多其他框架都以类似的方式支持 MVC,因此微软可能觉得有必要这样做。
简而言之,我非常怀疑它是否有强大的技术原因。
您可以使用当前的 ASP.NET 框架推出自己的 MVC,并且仍然保留回发模型。
http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx
这是一个很好的问题,很多人在 MVC 早期都问过这个问题。这是该项目的主要开发人员之一 Phil Haack 的答案!
http://haacked.com/archive/0001/01/01/everything-you-wanted-to-know-about-mvc-and-mvp-but.aspx
检查出来,阅读链接,然后从那里开始。
此外,辩论的答案可能是 S#arp 架构。他们在 MVC 之上构建了一个层,使其更像 MVP。如果您正在寻找这些方面的东西,请查看它们。
祝你好运!
我认为这更像是一个“恐慌营销决策”,而不是一个技术决策。RoR 每秒都在窃取市场,MSFT 完全惊慌失措,所以 MSFT 觉得他们必须提供一些东西,让他们有机会再次将一些炒作带回“他们的阵营”......
他们还需要通过将这个大肆宣传的词与他们自己联系起来来帮助他们的开发人员重新获得自尊,这样 .Net 开发人员就可以再次照照镜子,而不会因为他们自平台以来不了解 MVC 而感到羞耻选择没有为他们提供这种模式(开箱即用)
对于中等技能 (.Net) 开发人员来说,当中等技能的 RoR 开发人员启动 rake 并在 .Net 开发人员之前完成工作和运行的概念证明时,在不到 15 分钟的时间内创造了一个峰值,这真的很难不觉得自己像个恐龙。已完成启动 vstudio.exe ... ;)
我想这是一个有争议的观点,但这是我的,我会捍卫它直到痛苦的结局......;)
今天有无数这样的例子,是的,MVC 和脚手架会给你一个初始速度提升,是的。但是对于可维护性、代码重用、封装以及几乎所有真正重要的事情 - MVC 并不是“灵丹妙药”,而且大多数时候 WebForms 从长远来看要优越得多(当然,除非像卫生纸一样使用)