ASP.NET MVC是一种设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于分离关注点,提高代码的可维护性和可测试性。ASP.NET团队已经认识到这种模式的好处,并正在努力将其集成到ASP.NET中。本文将重点介绍如何使用Spring.NET和iBATIS.NET构建ASP.NET MVC Web应用程序。
在开始之前,确保开发环境满足以下要求:
Spring.NET是一个应用程序框架或轻量级容器,它允许.NET开发者构建企业级.NET应用程序,专注于他们真正的领域问题,而不是花费大量时间在提供服务的细节上。它还允许在使用基础类库时去除附带的复杂性,使得最佳实践,如测试驱动开发,变得容易实践。
2004年初,Martin Fowler在他的网站上询问读者:在谈论控制反转时,“问题是,他们正在反转控制的哪个方面?” Fowler随后建议重新命名这个原则(或至少给它一个更具解释性的名字),并开始使用依赖注入(Dependency Injection)这个术语。他的文章继续解释了控制反转(IoC)和依赖注入(DI)原则的基础。如果需要对IoC和DI有深入的了解,请参考以下文章:
http://martinfowler.com/articles/injection.html
Spring.NET由8个库组成,但本文将使用以下三个库:
以下是一个简单的Spring.NET配置示例:
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" />
</httpHandlers>
<httpModules>
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" />
</httpModules>
</system.web>
iBATIS是一个简单但完整的框架,它使能够轻松地将对象映射到SQL语句或存储过程。一个映射器的定义是“在两个独立对象之间建立通信的对象”。数据映射器是“将数据在对象和数据库之间移动的映射器层,同时保持彼此和映射器本身的独立性”。
iBATIS.NET的工作原理包括:
以下是一个简单的数据映射示例:
<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="LineItem" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Type aliases allow you to use a shorter name for long fully qualified class names. -->
<alias>
<typeAlias alias="LineItem" type="NPetshop.Domain.Billing.LineItem, NPetshop.Domain" />
</alias>
<statements>
<insert id="InsertLineItem" parameterClass="LineItem">
INSERT INTO [LinesItem](Order_Id, LineItem_LineNum, Item_Id, LineItem_Quantity, LineItem_UnitPrice)
VALUES (#Order.Id#, #LineNumber#, #Item.Id#, #Quantity#, #Item.ListPrice#)
</insert>
</statements>
</sqlMap>
ASP.NET MVC的前端控制器模式比传统的ASP.NET具有更复杂的生命周期。此外,前端控制器集中了诸如视图选择、安全性和模板化等功能,并一致地应用于所有页面或视图。当这些功能的行为需要改变时,只需要更改应用程序的一小部分。这通常被称为外观模式(Facade Pattern)。如果为外观模式设计,那么实现DI就变得容易了。
以下是ASP.NET MVC生命周期的概述: