这是我的特殊情况......
我对webforms有相当多的经验,我必须说,其中很多都非常令人沮丧。我喜欢有很多内置控件,但后来我发现它们并不是我想要的,开箱即用。我最终滚动自己的控件(继承自内置控件),例如GridViewThatCanSortItself
或GridViewThatHasASelectionColumn
(这些可能不是实际的名称,但你明白了)。我经常想知道,虽然努力建立这样的课程,但是否能够找出经常错综复杂的事件模型是值得的。我尝试使用CSS来设计样式也是令人沮丧的。有一些ASP.NET控件将为一组属性生成一个html标记,为另一组属性生成另一个标记。直到你发现你的css只能工作一半时,你才意识到这一点。
所以,我的大脑开始怀疑,ASP.NET MVC可以成为答案吗?阅读关于SO的一些帖子基本上给了我的印象,虽然webforms肯定有问题,但我只会为另一个问题交换一组问题。看起来微软似乎试图说服我:
来自asp.net网站(http://www.asp.net/learn/mvc/tutorial-01-cs.aspx)
的引用ASP.NET MVC ...适用于需要对应用程序行为进行高度控制的大型开发人员和Web设计人员团队支持的Web应用程序。
那真的不是我。我的大多数项目都相对较小,我通常是唯一的程序员。我有时需要创建非常自定义或不寻常的UI,但我绝对没有可以为我构建组件的程序员团队。
还有javascript的问题。我对html和css有一定的工作知识,但我不能对javascript说同样的话。尽管笨拙和臃肿,我已经能够用UpdatePanels
做一些平滑的事情。我不确定我需要花多少时间来学习javascript才能处理ASP.NET MVC中的简单AJAX场景。
我即将开始研究一个相对简单的小型网络应用程序,所以现在是时候冒险了,如果我要冒险的话。这个应用程序将使用SQL Server Express(2005或2008)后端,我正在考虑尝试将SqlMetal作为ORM解决方案。所以,这已经是我必须要学习的一件事了,尽管我至少有过 - 并且非常喜欢 - LinqToXml和LinqToObject。 Web应用程序的页面将包含一些数据网格(一些具有链接列),输入框,标签,下拉列表,复选框,单选按钮和提交/操作按钮。我没有预见到比这更复杂的事情。总共将有六到七页。
问题:
根据我的经验,学习ASP.NET MVC会有多痛苦?它值得吗?
我已经阅读了一些比较webforms与MVC的早期问题,所以我很好奇,过去一年左右MVC是如何演变的?是否有任何新的东西可以使学习曲线不那么陡峭?
我是否真的必须编写代码来手动生成所有html,或者社区中是否有代码/库可以帮助完成该过程? (我知道我读过一些关于“html助手”的内容 - 这可能是我在这里要问的。)
还有其他建议吗?
更新
我遇到的另一个问题是:从ASP.NET webforms到MVC的转换是从标准WPF(使用代码隐藏)到MVVM吗?我发现学习WPF本身非常具有挑战性(我仍然不能说我真的得到关于它的一切),但是学习使用MVVM模式使用WPF是一个相对无痛的过渡。所以,我想知道从webforms到ASP.NET MVC的跳跃是多么相似。
答案 0 :(得分:6)
我的建议是通过Nerd Dinner Tutorial的第一章中的Professional ASP.NET MVC(然后购买整本书,这很棒)来了解它如何组合在一起以及它如何工作您。这涵盖了您关注的大部分内容。
在使用原始HTML时,你将不得不沾沾自喜,但这并不像听起来那么可怕。特别是当你遇到Web Forms控制的问题时。
答案 1 :(得分:3)
是的,Asp.Net Mvc 可能可以解决您的问题。
我强烈建议你不要急于 (没有更好的知识,你最终会失望)。
但无论如何 - 它肯定是值得。你会学到很多东西。
在阅读bunch of sample applications时从some books开始(从Sanderson开始,继续使用Mvc In Action)。熟悉asp.net mvc。它需要不同的方式来思考您可能习惯的Web开发。并且不要害怕3rd party tools - 习惯他们因为asp.net mvc并不专注于'准备好2通过设计师和使用'解决方案而且缺乏超酷和闪亮(下面有糟糕的js / html)开始的控制确实吓坏了。
经过几周的游戏 - 你实际上可以自己回答这个问题 这是唯一值得回答的答案。
个人 - 我更喜欢asp.net mvc框架并且不想回去,尽管在某些情况下它确实需要更多的工作(即 - 实现自定义分页(这可以比分页更容易)控制提供))。
框架要求更好地了解OOP,架构和设计知识,良好的代码整洁感,因为提供one and correct way of doing things
方向的“标志”要少得多 - 它们必须在大多数情况下由您自己解决。所以 - 如果你不确定和/或不知道你在做什么,它会更容易drown in your own sh*t,html标签汤等。
我不同意关于大型开发团队的声明。这是关于OOP,“约定优于配置”和Mvc框架可扩展性的知识发挥作用的地方。正如我所看到的 - 编写可重用的代码更容易(这真的是主观的)。通过模板等功能(在mvc版本no2中),代码行数量大幅减少。
学习javascript。你错过了很多。如果你还没有这样做的话,可以使用jQuery(大大减少跨浏览器的兼容性问题)。 FireFox的Firebug插件是一个很好的帮助(用于调试目的)。 AJAX`ifying your mvc website一开始可能看起来很尴尬(关于这个主题的'Mvc in action'书中有一个很棒的提示,比如可以用来实现所谓的progressive enchancement with AJAX的形式劫持),但是一旦你习惯了JS - 感觉很棒。有一点需要提及 - JS是一个非常敏锐的工具(如果你不放弃你对.NET环境中开发的了解,也不要按照预期使用它)。很快就搞砸了JS代码库。
另一件事 - 对于那些只触及网页表单的人来说,有很多关于mvc框架的神话。
使用原始html并不难 读取表单值并不难(绑定机制非常好,可以轻松定制/扩展) 我相信还有更多。此刻就记不住了。 :)
答案 2 :(得分:2)
@DanThMan,我在第一次看到这个框架时做了同样的保留,但是现在已经使用了一段时间,根据选择,你没有办法让我回到WebForms。
我还经常写小应用程序,我是唯一的开发人员,我感谢上帝,我坚持使用MVC框架并花时间去学习它。
在我看来,它让编程再次变得有趣,我现在可以快速轻松地维护网站,这是第一次。
对于我的钱,这是要走的路,但这是一个陡峭的学习曲线,你需要时间来真正理解它。如果你有时间我会说它去。
答案 3 :(得分:2)
这里有一些很好的答案,其他线程也有一些好的答案。我会抓住一个尚未真正解决的问题。
过去一年MVC是如何演变的 或者?有什么新的吗? 会减少学习曲线 陡?
我大约8个月前有意识地转向MVC并且没有回头。版本1是稳定的,我开始在几个网站上使用它,当然还有几本书和互联网。当时的资源很好,但是自从我切换以来,事情已经被彻底炸毁了。
有一些版本1的书籍是顶级的(Steve Sanderson的 - Pro ASP.NET MVC框架和书呆子晚餐书)。水中肯定有asp.net MVC,所以我想有一些很棒的版本2本书。
开发者社区,特别是在这里,非常出色,而且越来越好。 “asp.net-mvc”目前是该网站上使用次数最多的第16个标签,每个问题的观看次数通常很高。截至今天,我还没有一个尚未回答的问题。很多聪明的人都在关注那些愿意提供帮助的MVC问题。
在codeplex上的contrib库也越来越好,并获得了一些好的参与。他们在填补第1版留下的漏洞方面做得非常出色。我只能认为随着MVC变老,这种情况会继续变得更强。
版本2的新功能在我看来很棒。我不会说出我最喜欢的名字,因为如果你没有玩MVC,他们对你没什么意义,只要知道开发团队已经听过并为新版本添加了许多强大的改进。他们非常积极地寻求反馈,并一直在寻求改进。不要指望这种变化很快就会发生。 (有一天,我打电话给微软并说“缩短'[AcceptVerb(Http.Post)]'到'[HttpPost]'”和bam,Mvc 2是我的想法。)
我想说的是:自从我做出切换后,我看到事情变得越来越好。我对我的决定感到非常满意,我对这个项目的未来感到非常兴奋。版本1很好,版本2更好,我迫不及待地想看看3,4和5 ......是什么。
我会告诉你:我现在已经将一些朋友从WebForms转换为MVC。他们中的每一个人都很高兴他们进行了切换,那些适用于应用程序各个方面的应用程序(C#代码,html,css,javascript,数据访问,单元测试等)将永远不会回归并且热爱asp .net MVC生活。
答案 4 :(得分:1)
根据我的经验,学习ASP.NET MVC会有多痛苦?它值得吗?
是的,是的。这将是痛苦的,这将是值得的,这就是原因。你将是一个更好的程序员,你的技能将更容易转移到其他平台。 MVC是一种非常常见的模式,你可以在几乎所有流行的语言中反复找到它。
你将与html,javascript和css更紧密地合作,但这是网络编程,你最好早点咬弹。
答案 5 :(得分:1)
一些开发人员似乎对面向组件的编程感到厌恶。对于其他人来说,感觉很自然。如果你发现自己经常与标准组件对抗,那么很容易从头开始自己动手 - 无论如何你最终都会在MVC中做到这一点。如果您发现自己正在使用Web表单对抗单元测试模型,那么使用MVC可以更轻松地找到方法。
然而,MVC并不是万灵药;有很多东西需要学习。有些应用程序不如使用Web表单复杂,有些应用程序会复杂得多。
我发现,在深入了解页面生命周期和ViewState使用之前,Web表单并不能真正吸引许多开发人员。在那之前,似乎有很多试验和错误 - 但是比使用IOC等MVC更容易学习。就自定义输出而言,使用控制适配器通常比将控件子类化更容易。如果它有帮助,我会从我的书中的网络表单方面解决这些问题:Ultra-Fast ASP.NET。
最后,我认为这部分是一种思维方式,哪种模式适合您解决问题的方式,并更好地考虑您的应用程序。
答案 6 :(得分:1)
使用我自己的控件通过HtmlTextWriter进行了我的最后几个项目(在拥抱mvc之前),我实际上发现过渡非常直接。我不得不说','我确实推迟了直到v1.0很好并且真正'在那里'并且只从8月/ 9月开始大踏步。我很高兴我进入它作为我使用的主要原因webforms中的HtmlTextWriter是在使用jquery时克服类名和id的一些基本问题。我不会说v1是一颗银弹,但它肯定只是与我的心态同时发挥作用。至于文学方面,我也阅读了sanserson和书呆子的晚餐书,并从中获取了大量的东西。与此同时,我也进入亚音速v3并在抢劫网站上找到了相当多的提示让我离开。
我真的无法想象必须'回到'webforms范例,因为我一直在寻找一种方法来放弃页面生命周期并控制膨胀这么长时间(我甚至在一个人看过php framewirks)指出作为一种摆脱webforms困境的方法 - kohana是一个很棒的小PHP框架。)
无论如何,只有我的苏格兰2便士值得...
快乐的圣诞节和快乐的2010年吉米亨德里