ASP.NET MVC与Spring.NET和iBATIS.NET的集成

ASP.NET MVC是一种设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于分离关注点,提高代码的可维护性和可测试性。ASP.NET团队已经认识到这种模式的好处,并正在努力将其集成到ASP.NET中。本文将重点介绍如何使用Spring.NET和iBATIS.NET构建ASP.NET MVC Web应用程序。

1. 先决条件

在开始之前,确保开发环境满足以下要求:

  • 操作系统:Windows Server 2003;Windows Server 2008;Windows Vista;Windows XP
  • 集成开发环境(IDE):Visual Studio 2008,Visual Studio 2008 SP1或Visual Web Developer 2008 SP1
  • 数据库:Microsoft SQL 2000或更高版本
  • 框架:.NET 3.5 SP1
  • ASP.NET MVC1.0 - 下载
  • Spring.NET 1.2.0 - 下载
  • iBATIS.NET DataMapper 1.6.1 - 下载

2. Spring.NET简介

Spring.NET是一个应用程序框架或轻量级容器,它允许.NET开发者构建企业级.NET应用程序,专注于他们真正的领域问题,而不是花费大量时间在提供服务的细节上。它还允许在使用基础类库时去除附带的复杂性,使得最佳实践,如测试驱动开发,变得容易实践。

2004年初,Martin Fowler在他的网站上询问读者:在谈论控制反转时,“问题是,他们正在反转控制的哪个方面?” Fowler随后建议重新命名这个原则(或至少给它一个更具解释性的名字),并开始使用依赖注入(Dependency Injection)这个术语。他的文章继续解释了控制反转(IoC)和依赖注入(DI)原则的基础。如果需要对IoC和DI有深入的了解,请参考以下文章:

http://martinfowler.com/articles/injection.html

Spring.NET由8个库组成,但本文将使用以下三个库:

  • Spring.Core:这是框架最基础的部分,允许使用依赖注入配置应用程序。
  • Spring.Aop:使用此模块执行面向方面编程(AOP)。AOP将可以声明性地应用于应用程序的公共功能集中。Spring的方面库提供了预定义的易于使用的方面,用于事务、日志记录、性能监控、缓存、方法重试和异常处理。
  • Spring.Web:使用此模块提高编写ASP.NET Web应用程序的抽象级别,允许有效地解决ASP.NET中的常见问题,如数据绑定、验证以及ASP.NET页面/控件/模块/提供程序配置。

以下是一个简单的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>

3. iBATIS.NET简介

iBATIS是一个简单但完整的框架,它使能够轻松地将对象映射到SQL语句或存储过程。一个映射器的定义是“在两个独立对象之间建立通信的对象”。数据映射器是“将数据在对象和数据库之间移动的映射器层,同时保持彼此和映射器本身的独立性”。

iBATIS.NET的工作原理包括:

  • 将SQL代码与编程代码分离
  • 将输入参数传递给库类并提取输出
  • 缓存常用数据直到它发生变化
  • 管理事务和线程
  • 使用实体类(换句话说,VO;值对象)

以下是一个简单的数据映射示例:

<?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>

4.ASP.NET MVC生命周期

ASP.NET MVC的前端控制器模式比传统的ASP.NET具有更复杂的生命周期。此外,前端控制器集中了诸如视图选择、安全性和模板化等功能,并一致地应用于所有页面或视图。当这些功能的行为需要改变时,只需要更改应用程序的一小部分。这通常被称为外观模式(Facade Pattern)。如果为外观模式设计,那么实现DI就变得容易了。

以下是ASP.NET MVC生命周期的概述:

  1. 接收应用程序的第一个请求。在Global.asax文件中,将Route对象添加到RouteTable对象。
  2. 执行路由:UrlRoutingModule模块使用RouteTable集合中的第一个匹配的Route对象创建RouteData对象,然后使用它创建RequestContext(IHttpContext)对象。
  3. 创建MVC请求处理程序:MvcRouteHandler对象创建MvcHandler类的实例,并将RequestContext实例传递给它。
  4. 创建控制器:MvcHandler对象使用RequestContext实例标识IControllerFactory对象(通常是DefaultControllerFactory类的实例),以创建控制器实例。
  5. 执行控制器:MvcHandler实例调用控制器的Execute方法。
  6. 调用操作:大多数控制器继承自Controller基类。对于这样做的控制器,与控制器关联的ControllerActionInvoker对象确定要调用的控制器类的哪个操作方法,然后调用该方法。
  7. 执行结果(结果视图):典型的操作方法可能会接收用户输入,准备适当的响应数据,然后通过返回结果类型来执行结果。可以执行的内置结果类型包括:
  • ViewResult(渲染视图,是最常用的结果类型)
  • RedirectToRouteResult
  • RedirectResult
  • ContentResult
  • JsonResult
  • EmptyResult
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485