mvc实例:酒店项目OO设计 - .NET/ASP开发者 - web思想社区 关注互联网平...

来源:百度文库 编辑:神马文学网 时间:2024/04/28 21:38:05



最近公司把网站项目决定全部利用asp.net mvc重构一次,虽然前期没有参与酒店项目重构,但在酒店的数据层以及业务逻辑层都有参与,本人平时喜欢研究些OO知识,在项目中偶尔也在适当的时候用对应的模式来武装代码。
酒店项目最重要的数据处理分为两种:
1:酒店搜索,这里面又详细分为三种:
<1>:酒店列表页搜索
<2>:酒店地图页搜索
<3>:积分广场酒店列表页搜索
说明:以上三种搜索方式,不仅仅是参数不同的问题,在逻辑上都有很大不同。

2:酒店下订单:
<1>:正常酒店订单。
<2>:积分兑换的酒店订单。

目的:为了更好的让页面UI层不涉及业务逻辑,基于抽象工厂理念,来实现解耦,详细的类图如下,并不是我们常见的标准抽象工厂模式,但思路基本一致。



第一:底层的抽象工厂类(管理工厂):HotelAbstractFactory。它主要用来管理酒店搜索工厂以及酒店订单工厂。以下是两个concreteFactory。 view source print? 01.public abstract class HotelAbstractFactory 02.{ 03.public virtual ISearchHotel GetSearchHotelInstance(HotelRequestInfo request) 04.{ 05.return null; 06.} 07.public virtual IOrderHotel GetOrderHotelInstance(HotelRequestInfo request) 08. 09.return null 10.} 11.private static HotelAbstractFactory factory = null; 12.   13.public static HotelAbstractFactory GetInstance(HotelRequestInfo request) 14.{ 15.switch (request.hotelActionType ) 16.{ 17.case EHotelActionType .Search : 18.factory = new HotelSearchFactory(); 19.break; 20.case EHotelActionType.Order : 21.factory = new HotelOrderFactory (); 22.break; 23.} 24.return factory; 25.} 26.} 第二:酒店搜索工厂类:HotelSearchFactory,它会生产出酒店列表页搜索工厂,地图页工厂等,积分广场酒店列表工厂。 view source print? 01.public class HotelSearchFactory:HotelAbstractFactory  02.{ 03.public override ISearchHotel GetSearchHotelInstance(HotelRequestInfo request) 04.{ 05.ISearchHotel search = null; 06.switch (request.hotelType) 07.{ 08.case EHotelType .ForSimple: 09.search = new HotelSearchBL(); 10.break; 11.case EHotelType.ForMap : 12.search = new HotelSearchForMapBL (); 13.break; 14.case EHotelType.ForSquare : 15.search = new HotelSearchForSquareBL() ; 16.break; 17.} 18.return search; 19.} 20.} 第三:酒店订单工厂:HotelOrderFactory,生成正常酒店订单工厂,积分广场订单工厂。 view source print? 01.public class HotelOrderFactory : HotelAbstractFactory 02.{ 03.public override IOrderHotel GetOrderHotelInstance(HotelRequestInfo request) 04.{ 05.IOrderHotel order = null; 06.switch (request.hotelType) 07.{ 08.case EHotelType.ForSimple: 09.order = new HotelOrderBL (); 10.break; 11.   12.case EHotelType.ForSquare: 13.order = new HotelOrderForSquareBL (); 14.break; 15.} 16.return order; 17.} 18.} 第四:酒店搜索接口:ISearchHotel,所有的搜索工厂都受到它的约束。 view source print? 1.public interface ISearchHotel 2.{ 3.List GetHotelList(HotelRequestInfo request); 4.   5.} 第五:酒店订单接口:IOrderHotel,所有的酒店产品订单工厂都受它的约束。 view source print? 1.public interface IOrderHotel 2.{ 3.string InsertHotelOrder(HotelReserveInfo request); 4.} 第六:酒店搜索接口具体实施类:HotelSearchBL,HotelSearchForMapBL,HotelSearchForSquareBL。 view source print? 01.public class HotelSearchBL : ISearchHotel 02.{ 03.public List GetHotelList(HotelRequestInfo request) 04.{ 05.List hotelSet = new List(); 06.for (int i = 0; i < 10; i++) 07.{ 08.HotelInfo info = new HotelInfo(); 09.info.hotelID = i; 10.info.hotelName = "普通酒店" + i.ToString(); 11.hotelSet.Add(info); 12.} 13.return hotelSet; 14.   15.} 16.   17.} 第七:酒店订单接口具体实施类:HotelOrderBL,HotelOrderForSquareBL。 view source print? 1.public class HotelOrderBL : IOrderHotel 2.{ 3.public string InsertHotelOrder(HotelReserveInfo request) 4.{ 5.return "普通酒店下订单成功"; 6.   7.} 8.} 客户端调用:
1:调用酒店列表数据:
view source print? 1.//搜索普通酒店 2.HotelRequestInfo request=new HotelRequestInfo (); 3.request .hotelActionType =EHotelActionType .Search ; 4.request .hotelType =EHotelType .ForSimple ; 5.List list = HotelAbstractFactory.GetInstance(request).GetSearchHotelInstance(request).GetHotelList(request); 2:下普通酒店订单: view source print? 1.//普通酒店下订单 2.request = new HotelRequestInfo(); 3.request.hotelActionType = EHotelActionType.Order; 4.request.hotelType = EHotelType.ForSimple ; 5.info = new HotelReserveInfo(); 6.info.hotelID = 1; 7.result = HotelAbstractFactory.GetInstance(request).GetOrderHotelInstance(request).InsertHotelOrder(info); 优点:
      1:多条分支,但方法签名统一,对于搜索来讲,永远只会让用户知道GetHotelList,下订单时,用户也只会知道InsertHotelOrder。
      2:UI依赖接口不依赖具体实现,修改其中一条分支的逻辑不会影响其它分支。
      3: 通过抽象工厂类,我们可以对酒店项目重要的接口非常清晰。

mvc实例:酒店项目OO设计 - .NET/ASP开发者 - web思想社区 关注互联网平... 解决基于tomcat的web应用乱码问题 - J2EE开发者 - web思想社区 关注互联网平台级架构设计,UNIX/LINUX系统管理,项目管理,个人职业规划及RIA,CSS/JS/XML,ASP, 解决基于tomcat的web应用乱码问题 - J2EE开发者 - web思想社区 关注互联网平台级架构设计,UNIX/LINUX系统管理,项目管理,个人职业规划及RIA,CSS/JS/XML,ASP,PHP,.NET,JSP,数据库性能提升 - Powered by Discuz! 台球瞄准算法 - 电子书籍/知识库 - web思想社区 关注互联网平台级架构设计,UNIX... 台球瞄准算法 - 电子书籍/知识库 - web思想社区 关注互联网平台级架构设计,UNIX... 台球瞄准算法 - 电子书籍/知识库 - web思想社区 关注互联网平台级架构设计,UNIX... ASP.NET下MVC设计模式的实现 ASP.NET下MVC设计模式的实现 关于ASP.NET Web Forms和ASP.NET MVC技术之争论 ASP.NET下MVC设计模式的实现-微软开发专栏-ASP.NET-天极网 琳婕小筑-老猫的理想 - ASP.NET下MVC设计模式的实现 - 琳婕小筑-老猫的理想 - ASP.NET下MVC设计模式的实现 - InfoQ: ASP.NET开发人员需要学习ASP.NET MVC么? Web常用UI库 kissy - 前端开发者 - web思想社区 分享知识是快乐的-RIA... ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作... web.config文件详解 | .NET开发者 ASP.NET项目开发计划 ASP.NET项目开发计划 《ASP.NET办公自动化系统开发实例导航》笔记二 系统管理模块设计 蛙蛙推荐:ASP.NET MVC学习笔记 认识ASP.NET配置文件Web.config ASP.NET Web Page应用深入探讨 ASP.Net Web Page深入探讨 ASP.NET 2.0加密Web.config 配置文件