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 配置文件