我正在尝试对ASP.Net MVC有一个高层次的了解,并且我已经开始发现它看起来很像原始的ASP脚本。回到当天,我们将“模型”/业务逻辑代码组织到VBScript类或VB COM组件中。
当然,现在我们拥有c#和.net框架类的额外功能。除了c#和.Net中的高级oo和其他功能外,原始ASP和ASP.Net MVC之间的其他主要区别是什么?
答案 0 :(得分:12)
有三个主要区别:URL映射,逻辑与表示的分离以及强类型。
使用经典ASP,可以从编写HTML页面到编写带有动态内容的HTML页面顺利过渡。与静态HTML文件一样,每个URL都直接映射到文件系统中的文件。同样的事情或多或少都适用于ASP.NET,因为它的价值。
在ASP.NET MVC中,URL的每个“族”都映射到Controller对象(默认情况下存储在/ Controllers目录中),其中该族的每个成员在访问时调用方法。在每个方法的末尾(通常),你告诉它渲染一个特定的视图(存储在/ Views目录中以控制器命名的文件夹中),这很像一个经典的ASP页面,所有逻辑都被分离出来。
这为您提供了逻辑和SEO友好的URL和组相关的功能。
在经典的ASP中,通常会找到顶部包含一些HTML的页面,然后打开数据库连接,并在输出给用户时从数据库中读取一些内容,然后再输入一些html,然后是另一个数据库语句,依此类推。
在ASP.NET MVC中,您的业务逻辑(例如验证)位于模型层中(您可以从几十种中选择一种,但流行的选择是LINQ-to-SQL和LINQ-to-Entity-Framework),您的人机界面逻辑进入控制器(例如,根据国家/地区选择填充州/省菜单),您的演示文稿(您可以交给设计人员编辑的实际HTML)进入视图。
除了保持组织有序外,这还有助于为事物编写自动化测试。您可以将一个模拟对象发送到您的视图并确保它看起来不错,您可以将错误数据发送到您的模型并确保它抱怨,并且您可以确保控制器发送到您的视图的对象与您的视图一致它从模型中读取的内容。
ASP.NET是强类型和编译的。这是一把双刃剑。一方面,它会在编译时捕获很多愚蠢的程序员错误。另一方面,这意味着你的代码中存在“无穷大减1”可能的错误(单元测试可以使其无穷大减去更大的数字)。此外,你必须做的事情如下:
if (MyArray.Length > 0)
而不是
if (MyArray.Length)
但恕我直言,这是一个很小的代价来支付你从强打字得到的速度和理智检查。
在一个大框架中编译语言的更大缺点是,部署变得比使用Classic ASP更具生产力。您不能只是将几个文件复制到Web服务器来更新您的应用程序。您通常必须关闭Web服务器(希望您有一个冗余对)并重新编译,这可能需要几分钟。
答案 1 :(得分:2)
ASP.NET MVC有很多管道基础设施:例如,路由引擎自动调用正确的控制器和操作,并可以从URL中提取位作为操作参数传递;或基于会议的观点位置。它还提供了更多结构,用于将数据从控制器传递到视图(ViewData对象)。
另外,关键的是,MVC支持视图引擎。您可以在其中编写带有帮助程序的原始HTML,但您也可以使用Web窗体,Spark,NHaml等视图引擎,它们允许您编写更简洁的视图代码,创建可重用的组件(例如Web窗体控件)等。在ASP Classic中是不可能的。
答案 2 :(得分:0)
Classic ASP使用VBScript,它没有类。它根本不是面向对象的。
答案 3 :(得分:0)
通常使用不同的技术我们可以实现相同的目标 最后结果。 创建简单网站几乎与技术选择无关。 但是当你想要建立一个大型复杂站点时,是否存在允许优化代码的框架,保持良好的组织和有效的划分可能会发挥作用 至关重要,大大减少了工作。
ASP Classic没有达到asp达到的相同结果 net mvc。
如果我们省略c#vb脚本之间的明显差异,我会说差异 主要是你可以更好地组织你的代码。
与经典的ASP一样,很容易制作“意大利面条代码,而且用asp 相反,mvc很容易保持一切整洁和分离代码 来自展示的商业逻辑。
不仅如此。
Asp Net Mvc与EntityFramework等技术无缝集成 允许进一步细分和组织代码。