ASP.Net MVC与Classic ASP(不是ASP.Net – 原始ASP)有何不同
我试图对ASP.Net MVC有一个高层次的了解,它已经开始发生在我看来它看起来很像原始的ASP脚本.回到当天,我们将“模型”/业务逻辑代码组织到VBScript类或VB COM组件中.
当然,现在我们拥有c#和.net框架类的额外功能.除了c#和.Net中的高级oo和其他功能外,原始ASP和ASP.Net MVC之间的其他主要区别是什么? 解决方法
主要区别有三个:URL映射,逻辑与表示的分离以及强类型.
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服务器(希望您有一个冗余对)并重新编译,这可能需要几分钟. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – RadGrid在Visual Studio 2013中打开应用程序时,
- asp.net – Linq-to-SQL和DateTime的奇怪
- asp.net-mvc – 绑定到Viewmodel的文件上传
- ASP.NET Web Forms jQuery
- asp.net-mvc-3 – 如何将复选框绑定到mvc3中的viewmodel
- asp.net – 如何在gridview中只显示日期而不是datetime?
- asp.net – 我可以在global.asax.cs中访问虚拟目录名吗?
- asp.net-mvc – 在ControllerInstanceFilterProvider的Filt
- asp.net – 在编辑模式下未选择的Html.DropDownListFor值
- asp.net-mvc – 我可以创建一个带有MVC3助手的选择列表
- 使用ASP.NET窗体身份验证的WCF服务
- 逗号之后拆分字符串直到字符串结束 – asp.net c
- asp.net – 如何使用jquery或jscript触发单击按钮
- asp.net-mvc – 使用ASP.NET MVC,有没有办法捕获
- asp.net – aspnet_regiis不存在
- asp.net-mvc – 我可以在使用区域时将system.web
- asp.net-mvc – Application_Error已调用,但没有
- 使用ASP.NET SDK将文件上载到S3存储桶的文件夹
- asp.net-mvc – 使用Castle Windsor在ASP.NET MV
- asp.net-mvc – App_Web _ * .dll中的System.Nul