我最近对mvc进行了一些研究/阅读,只是想知道主要目的是什么。
我可能完全忽略了这一点,但asp.net表单真的从html中分离了逻辑,如果你只是想要干净的url,为什么不使用mod_rewrite规则?
答案 0 :(得分:6)
MVC是一种软件工程概念,其使用范围比ASP.net更广泛。
简而言之,它鼓励强烈分离:
C代表 C ontroller - 绑定模型骨骼和视图肌肉的韧带,让它们干净利落地相互沟通。 / p>
你是正确的'正常'ASP.net使用代码隐藏文件,以便页面标记与生成该标记的代码分开(与PHP之类的代码直接嵌入HTML之类的语言相反),但是MVC ASP.net鼓励我以上述方式进行更多分离。
请查看this tutorial以获得有关模式的更详细讨论。另请查看this SO question
MVC模式与重写URL无关。 ASP.net MVC可能会使这更容易,但这绝不是它的主要目的。
答案 1 :(得分:3)
可测试性是使用ASP.NET MVC的一大好处。为ASP.NET winforms编写单元测试是非常重要的。对控制器进行单元测试要容易得多。
如果你正确地进行MVC,你的视图应该非常轻,并且你的很多逻辑都在控制器中实现。
答案 2 :(得分:3)
让我比较两者:
他们使旧的 ASP 技术成熟,更像是PHP。代码和演示文稿堆积在同一个文件中。 Asp.net Web表单通过提供将两者分开的机制来升级此模型。但它们建立在Windows应用程序开发人员所拥有的优点之上。具有控制事件的拖放界面创建就像它们存在于Windows应用程序中一样。事件思想代码与HTML分开,它们没有分开。 你仍然在你的代码隐藏中引用了很多视图控件,因此它们仍然非常依赖于彼此。
因此,在Asp.net网络表单上开始开发相当容易。但非精明的开发人员很快就遇到了他们不知道存在的瓶颈(例如由于巨大的视野状态等导致的慢回发)。技术使用一些技巧来完成这项工作。但是在严重的大规模应用中,这成了一个很大的问题。开发人员必须将他们的代码混合在一起,以使其与Asp.net Web表单框架一起使用。它们的复杂形式具有复杂的代码隐藏,具有难以维护的代码和复杂的状态。
好的(以及坏的)东西当时是丰富的服务器控件。现在有了web 2.0,它们似乎不再富有,因为它们实际上并不像它们应该那样支持客户端功能。所以微软决定也填补其他东西。更新面板。只需轻轻一按手指即可实现部分渲染(和Ajax)。但它带来了成本。使用(使用)它的每个人很快意识到它不是专业应用程序可以实现的可行解决方案。
现在我们有一项与Asp.net网络表单没有多少共同之处的新技术,除了名称的第一部分。 MVC框架实际上将代码与用户界面(视图)分开。控制器操作(在任何HTTP请求上执行的代码)保持很小,并且对可视化没有任何作用(它不会将数据绑定到某些控件等)。控制器操作几乎不为视图的数据准备要么消耗,要么不消耗。这取决于观点。 控制器代码不会以任何方式形成或形成任何视图控件或任何内容的参考。它们在MVC中实际上是分开的。
另一方面,视图只显示和提供数据。它们可以部分或完全呈现。它们支持Ajax功能,以达到每个人都想使用的程度。实际上,一切都被分成了基本的小东西。 Divide et impera (分而治之)似乎是这里的保存线。
没有隐藏的功能。没有与Windows开发调情。它纯粹的请求响应框架。开发人员能够100%控制其应用的视觉方面。但是没有开箱即用的丰富控制的成本。这些可能是由社区提供的,或者一些开发人员更愿意创建更好地服务于流程的每个目的控件。
两者各有利弊。但是如果你决定构建一个半复杂,现代和可维护的应用程序,我建议你给MVC一个去 但是如果您只需要15个屏幕应用程序(没有任何特定的接口要求),那么使用Asp.net Web表单创建它会快得多。
答案 3 :(得分:2)
MVC是一种设计模式。其目的是将业务逻辑和表示细节分开。
ASP.Net MVC是一种使用ASP.Net和MVC模式创建Web应用程序的机制。 ASP.NET MVC的一个功能是能够使用SEO友好URL为控制器部分提供命令。
你可以按照你的说法去做,但ASP.Net为你提供了一种更容易实现这一目标的机制。
ASP.Net Webforms的设计方式是,您可以轻松地将控件拖到Web表单上并对下面的逻辑进行编码。 ASP.Net MVC旨在让您更轻松地分离您的疑虑。
答案 4 :(得分:1)
ASP.NET MVC框架的URL部分只是一个产生搜索引擎友好URL的现代现象。在微软团队决定将它们添加到框架之前很久就已经存在了很长时间(在没有IIS扩展的情况下,它需要IIS7才能完成)。
在我看来,最优秀的专业人士来自于能够更轻松地进行测试,以及更清晰地分离应用程序的各个部分。 ASP.NET MVC框架的整个ActionResult体系结构使得从AJAX切换到普通POST非常容易。
Delphi 5用于在10年前将MVC模型用于其ISAPI扩展。
答案 5 :(得分:1)
MVC 不仅仅是一个ASP.net的东西,它是一个在.NET框架中创建之前被广泛接受的设计模式,关于MVC的事情是数据与表示的分离来自业务层的(用户交互)。这只是微软在.NET框架下提供这种设计模式的一种方式
答案 6 :(得分:1)
虽然我之前的人已经为ASP.NET MVC的目的提供了足够的答案,但有一点我想补充一点。
ASP.NET Web Forms试图从Web开发中抽象html和web。这种方法导致缺乏丰富的javascript框架的性能和使用。可以在没有网络实际知识的情况下创建Web应用程序。
回答你最初的问题,ASP.NET MVC的目的,我引用Dino Esposito:
使用ASP.NET MVC,您可以重新发现Web无状态行为的良好品味,完全控制HTML的每一个部分,完全控制脚本和CSS自由。
答案 7 :(得分:0)
MVC早在人们试图在HTML页面中使用它之前就存在了。 MVC的主要原因是掌握驱动应用程序的逻辑。 MVC允许您清楚地分离应该分开的事物:模型,转换显示模型值的代码和控制模型的代码。
因此,这与HTML或URL无关。只是MVC使得清晰的HTML和简单的URL变得非常简单。