为什么Microsoft选择MVC for ASP.NET?

时间:2009-05-12 20:49:12

标签: asp.net-mvc model-view-controller design-patterns mvp passive-view

除了30年的模式之外,MVC从未用于当前的应用程序。 MVP是其继任者,旨在处理90年代推出的基于事件的应用程序。被动视图和监督控制器似乎已经上升到顶部。对于这两个,几乎没有必要谈论MVC / MVP。

具体来说,ASP.NET MVC中的控制器操作是否会带回创建该视图的视图?在MVC中,控制器不会创建视图或与它们对话。将ASP.NET MVC称为MVC实现有多准确?或者,它的准确名称是什么?

9 个答案:

答案 0 :(得分:14)

我认为Ruby on Rails激发了MS创建asp.net MVC。

答案 1 :(得分:13)

ASP.NET MVC就是微软对Ruby on Rails和Django等Web框架中MVC实现成功的认可。认识到许多Web开发人员希望更多地采用Web开发方法,这种方法包含“自以为是”的编程模型(约定优于配置),并且偏离了ASP.NET WebForms提供的有状态抽象。

它是Smalltalk MVC模式的精确实现吗?不,这是恐慌的结果吗?不,这是Ruby on Rails和Django成功的结果吗?是。

我碰巧喜欢这个模型,因为它包含.NET和ASP.NET堆栈提供的丰富框架,同时在基于约定的开发的方法和使用方面保持简约。

答案 2 :(得分:8)

足够接近,这是一个销售策略。

他们将ASP.NET与其他自称为MVC的技术进行销售。因此,将其命名为在同一类别中被识别是有竞争力的。

微软通过产品定位而不是通过准确的技术识别获得更多。 (加上长期交付,恕我直言。)

答案 3 :(得分:4)

ScottGu在第一次MVC演示here的帖子的第一部分中回答了答案。简短的回答是,人们要求它,微软决定采用它。它符合当前的.Net模型,可以添加尽可能多的选项,使框架能够覆盖更大的目标市场,并为开发人员提供适合正确项目的工具。

答案 4 :(得分:2)

由ASP.NET MVC实现的MVC不是旧的MVC模式。在我称之为“经典”的MVC中,View直接但只读,访问模型,在ASP.NET MVC中,它被认为是直接从View访问您的业务模型的不良形式。你最终得到的东西非常像监督控制器+被动 视图:

public class MvcExampleController : Controller
{
    public ActionResult ActionMethod(BoundInputData inputData)
    {
        var results   = DoActualWorkInTheModelWith(inputData);
        var viewModel = CreateViewModelFromThe(results);

        return View(viewModel);
    }
}

对我来说,这看起来更像是一个监督控制器而不是经典的MVC。一旦在Model中完成工作,视图就会传递一个ViewModel(又名PresentationModel)。 ViewModel通常与视图中的UI元素具有1对1的关系,并且可能看起来或者看起来不像实际模型中的对象。一个视图作用于ViewModel而不是实际的模型,对我来说有点像被动视图。

我不会了解这是否是一个“真正的”MVC实现,但如果您的论点是ASP.NET MVC不使用现代Web设计模式,我不得不反对。

答案 5 :(得分:1)

最好的猜测,每个人都听说过MVC。 MVC作为“最佳实践”已经被打了很长一段时间,因此整整一代(或两个或三个)开发人员都看到MVC并思考快乐的想法。

此外,许多其他框架以类似的方式支持MVC,因此微软可能也不得不这样做。

简而言之,我非常怀疑它有很强的技术理由。

答案 6 :(得分:1)

您可以使用当前的ASP.NET框架滚动自己的MVC,并保留回发模型。

http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx

答案 7 :(得分:0)

这是一个很好的问题,很多人在MVC的早期就提出了这个问题。以下是该项目的主要开发人员Phil Haack的答案!

http://haacked.com/archive/0001/01/01/everything-you-wanted-to-know-about-mvc-and-mvp-but.aspx

检查出来,阅读链接并从那里开始。

此外,辩论的答案可能是S#arp Architecture。他们在MVC之上构建了一个层,使其更像MVP。如果你正在寻找这样的东西,请检查它们。

祝你好运!

答案 8 :(得分:-3)

我认为这更像是一个“恐慌性营销决策”,而不是技术决策。 RoR每秒都在窃取市场,MSFT完全恐慌,所以MSFT认为他们必须提供一些让他们有机会再次回到“他们的阵营”的东西......

此外,他们还需要帮助他们的开发人员再次获得自我尊重,将这个炒作的词与自己联系起来,以便.Net开发人员能够再次看到自己的镜子,而不会感到羞耻,因为他们不知道MVC因为他们选择的平台没有为他们提供这种模式(开箱即用)

对于一个技术熟练的(.Net)开发人员来说,当一个技术熟练的RoR开发人员在不到15分钟内创建一个尖峰并且在工作和运行之前有一个概念验证时,很难不觉得自己像恐龙。网络开发人员甚至已经完成启动vstudio.exe ...;)

我想这是一个有争议的立场,但它是我的,我会捍卫它直到痛苦的结束......;)

今天有无数的例子,是的,MVC和脚手架会给你一个初始的速度提升,是的。但是对于可维护性,代码重用,封装以及大多数真正重要的事情 - MVC只是不是“银弹”而且大多数时候WebForms从长远来看都是优越的(除非像厕所一样使用当然是纸)