上周,我的老板要求我的团队为下一个项目评估ASP.NET MVC。 我们所有人都使用自.NET 1.1以来的webform,我们之前没有MVC经验,但我的所有同事都对ASP.NET MVC感兴趣,但没有运气,我们的最终答案是否定的。
由于:
我们相信尽管您是ASP.NET Guru,但您可以在短时间内构建复杂的应用程序。但是如果你改为ASP.NET MVC,开发时间会花费更长的时间,每个东西都需要使用html helper,没有web控件,还有很多问题,请继续打开带有ASP.NET论坛的Firefox Tab,询问How-To问题。
我们曾经多次看到人们说MVC提供了更好的项目管理,但如果它是一个复杂的网站,我可以想象有百分之百<%=%&gt; TAG在一个页面中,并保持打开控制器以查看要返回的内容,并保持打开模型以查看逻辑。
我可以说,MVC并不坏,但Webform足以处理这项工作。
答案 0 :(得分:17)
转换为新技术或“思维方式”需要数周时间。
使用MVC,您必须摆脱旧的ASP.NET Forms思考“复杂Web应用程序”的方式,即“我们有多少页面,超过300页!这将是巨大的!”。您可以更改整个应用程序的视图。你从“接下来需要创建的页面”的旧思维转向MVC思考“我们接下来需要实现什么功能”的思维方式。
例如,我自己控制了一个项目,该项目仅在'web'项目中有超过3300个文件(加上11个支持程序集)。我正在构建的一件事是MVC将如何将物理文件的数量大幅减少到大约310左右。怎么样?因为我正在离开“这里是一页。这是另一页。”以“这是我想要实现的功能”的思维方式。
通过将页面视为您要完成的功能,您可以开始将该页面的部分抽象为常用功能。
MVC可以通过这种思维方式进行大规模扩展,因为现在你有一个模板用于你想要它的外观,你只需要实现另一个“功能”来改变你想要的视图(html)的外观渲染。没有第二页,没有额外的控制等等。
现在,正如你所提到的“没有网络控制”:再次,这需要一种不同的思维方式。 HtmlHelper用于基本渲染和编码。我使用一个名为MyProjectHelper的抽象类来使用相同的概念,该类将我的“函数”呈现在页面上(functions = code)。
例如,我总是在过去为我的DisplayNames创建一个服务器控件。这允许我控制DisplayName的显示方式,特别是切换到Facebook Connect和其他东西。使用MVC,我不再使用“服务器控件”,而是使用ViewModel上的“函数”来呈现该文本:CollegeProjectViewModel.RenderDisplayName()。因为这只是UI层的一部分,所以这将根据需要使用我想要的任何选项呈现Anchor(当然,摘要是由学习“基本”文本渲染的CollegeProjectViewModel继承的。)
MVC的强大之处在于不再需要“网页”,而是“功能”或您想要对您的网站做什么的方法。通过改变这种思维方式,您可以使用在控制器上创建的尽可能多的方法进行扩展。它确实在大规模IMO上加快了速度。
答案 1 :(得分:8)
我在我上一家公司工作了6个月的MVC项目(我们使用的是CTP版本,最后是beta版本)。最初,这很有趣,令人兴奋,感觉就像我们真的在做某事。像许多.NET开发人员一样,我们厌倦了Web窗体的漏洞抽象。
然而,随着时间的推移,我们开始质疑我们的决定。 UI开发占用了我们80%以上的时间。我们必须从头开始构建所有UI。有一半时间感觉我们正在重新发明轮子。我们的大多数Rich UI都来自JQuery和Custom HTML Helpers,它们设计起来很有趣,但很耗时。
我们遇到了其他问题,例如DTO类对象从我们的业务对象(从NHibernate支持的存储库中获取)映射到Views的必要性。我们的控制器,显然应该是轻量级的,易于维护,变得越来越混乱,我们一直在争论实现控制器继承的正确方法。
回想起来,我觉得我们遇到的所有问题都是由于我们缺乏对MVC的经验和理解。我们都喜欢MVC的想法,但只是没有实际经验和专业知识来有效地使用它我认为是一个非常复杂的(想象一下销售队伍,但有更好的报告)应用程序
- 更新 -
上个月使用它来处理一个非常小的项目,到目前为止事情进展顺利。使用它比我一年前使用的CTP版本容易得多。我目前正在寻找我自己的复杂“网格视图”的个人解决方案,然后我可能完全切换到大多数项目。然而,动态数据一直在对待我,我在2之间徘徊。
- 2011年更新 -
在过去一年左右的几个不同规模的MVC项目之后,我变得有点皈依。我所遇到的所有实际问题大多已在最新版本(2&amp; 3)中得到解决,尤其是涉及模型验证和视图绑定的问题。
但有一件事:创建高度交互式数据网格仍然有点乏味,这在WebForm中仍然有些容易。但是,有第三方提供提供有用的MVC扩展,使这不那么令人担忧。就个人而言,我将Telerik的产品用于了很多目的。
答案 2 :(得分:2)
使用MVC的许多好处之一是删除了viewstate hog。
如果您的Webform应用程序非常庞大并且使用了很多服务器端项目,这些项目会使您的视图状态膨胀,那么MVC实际上可能对您有所帮助,即使开发可能需要更长时间。
另一方面,请关注.NET v4.0,它将允许您在控件级别而不是在页面级别上控制viewstate。这将使MVC整体上不那么美味。
答案 3 :(得分:1)
我认为你的团队有时间适应新技术是对的,短期内需要额外的时间。
我不会开始在生产中使用MVC,直到一些像样的书出来,团队有机会阅读书籍和玩技术。否则,你的开发团队似乎会花很多时间观看截屏和钓鱼文档。
答案 4 :(得分:1)
我来自webform开发(就像你一样),从1.0到3.5。当我发现MVC(CTP)时,花了我大约6个月的时间来说服我的同事(和我的老板)说这是可行的方法。
我的论点的一些亮点:
尽管#6有点主观,但我确实尝试通过构建原型来证明它。对于我的原型,我使用webform和asp.net mvc构建了一个简单的仪表板Web应用程序。我向同行和老板展示了结果,以及构建和维护每个人的复杂性。最后,我们将主要方法从webform迁移到MVC。
确实需要一段时间才能“忘掉”一些网络形式范式。但是一旦你得到它,MVC就更容易拿起,你可以运行它。
在webform中,是的它功能强大,但通常在大型项目中,我们花费大量时间尝试“自定义”或“强制”服务器控件以按照我们想要的方式运行和执行 - 以及复杂性随着系统的增加,这种定制的复杂性也呈指数增长。
在webform中,真正的AJAX也很难。 UpdatePanel有自己的作用,但嵌套的更新面板也有自己的问题。
对于我和我的同行来说,它归结为控制我们的HTML /代码/ AJAX的能力 - 而不是由框架自动生成90%,但我们不得不花费大量的时间和精力来完成剩下的10%
ASP.NET MVC,结合jQuery,以及您喜欢的商业层框架或ORM,功能非常强大。到目前为止,我们已经发布了3个ASP.NET MVC生产版本,它们都表现良好 - 请看看stackoverflow.com(它使用MVC btw)。