主要有三个区别:URL 映射、逻辑与表示的分离以及强类型。
网址映射
使用经典 ASP,可以从编写 HTML 页面平滑过渡到编写具有动态内容的 HTML 页面。与静态 HTML 文件一样,每个 URL 都直接映射到文件系统中的文件。对于 ASP.NET,同样的事情或多或少是真的,因为它的价值。
在 ASP.NET MVC 中,URL 的每个“家族”都映射到一个控制器对象(默认情况下存储在 /Controllers 目录中),该家族的每个成员在访问时都会调用一个方法。在每个方法结束时(通常),你告诉它渲染一个特定的视图(存储在 /Views 目录中以控制器命名的文件夹中),这很像一个经典的 ASP 页面,所有逻辑都被分离出来.
这为您提供了合乎逻辑且对 SEO 友好的 URL,并将相关功能组合在一起。
逻辑与表示分离
在经典的 ASP 中,通常会找到顶部包含一些 HTML 的页面,然后打开数据库连接,从数据库中读取一些内容,同时输出给用户,然后再输出一些 html,然后是另一个数据库语句,依此类推。
在 ASP.NET MVC 中,您的业务逻辑(例如验证)进入模型层(您可以从几十种中选择一种,但流行的选择是 LINQ-to-SQL 和 LINQ-to-Entity-Framework),您的人机界面逻辑进入控制器(例如,根据国家/地区选择填充州/省菜单),并且您的演示文稿(您可以交给设计师编辑的实际 HTML)进入视图。
除了保持事物井井有条之外,这还有助于为事物编写自动化测试。您可以将模拟对象发送到您的视图并确保它看起来不错,您可以将错误数据发送到您的模型并确保它抱怨,并且您可以确保您的控制器发送到您的视图的对象与它从模型中读取的内容。
强类型化和编译
ASP.NET 是强类型和编译的。这是一把双刃剑。一方面,它会在编译时捕捉到很多愚蠢的程序员错误。另一方面,这意味着您的代码中可能存在“无穷大减一”的错误(单元测试可以使其无穷大减去一些更大的数字)。此外,您还必须执行以下操作:
if (MyArray.Length > 0)
而不是
if (MyArray.Length)
但恕我直言,这是为您从强类型输入中获得的速度和健全性检查付出的小小代价。
在大型框架中编译语言的更大缺点是,与经典 ASP 相比,部署变得更像是一种生产方式。您不能只将几个文件复制到 Web 服务器来更新您的应用程序。您通常必须关闭网络服务器(希望您有一个冗余对)并重新编译,这可能需要几分钟。