外观模式
定义
根据需要将子系统的实现封装成接口提供给其他业务使用,即将细粒度的对象包装成粗粒度的对象。
类图
这只是一个实现类的类图形式展现,也许不能表达出外观模式的用意。详情请看代码:
代码
1 #region Model 2 /// <summary> 3 /// 主单信息 4 /// </summary> 5 [DataContract] 6 public class MainOrder 7 { 8 [DataMember] 9 public string OrderId { get; set; } 10 [DataMember] 11 public string UserId { get; set; } 12 [DataMember] 13 public DateTime CreateTime { get; set; } 14 } 15 /// <summary> 16 /// 明细单信息 17 /// </summary> 18 [DataContract] 19 public class DetailOrder 20 { 21 [DataMember] 22 public string Id { get; set; } 23 [DataMember] 24 public string OrderId { get; set; } 25 [DataMember] 26 public string ProductId { get; set; } 27 [DataMember] 28 public decimal Price { get; set; } 29 [DataMember] 30 public int Amount { get; set; } 31 } 32 #endregion 33 34 #region 本地系统业务 35 /// <summary> 36 /// 主单业务类 37 /// </summary> 38 public class MainOrderBll 39 { 40 public MainOrder QueryMainOrderById(string orderId) 41 { 42 //TODO 根据Id查询主单信息 43 return new MainOrder(); 44 } 45 } 46 /// <summary> 47 /// 明细单业务类 48 /// </summary> 49 public class DetailOrderBll 50 { 51 public IList<DetailOrder> QueryDetailOrderByMainId(string orderId) 52 { 53 //TODO 根据主单Id查询明细信息 54 return new List<DetailOrder>(); 55 } 56 } 57 #endregion 58 /* 59 * 以上业务可以实现本地系统,不走服务时的业务要求 60 * 但现在需要给客户提供一个订单信息的业务接口 61 * 此时我们就会使用到Facede模式:将主单的查询和明细单的查询归并成一个接口实现 62 * 当然我们也将定义一个DTO实现业务对象的传输 63 */ 64 /// <summary> 65 /// 订单信息传输类 66 /// </summary> 67 [DataContract] 68 public class OrderDTO 69 { 70 [DataMember] 71 public MainOrder MainOrderInfo 72 { 73 get; 74 set; 75 } 76 [DataMember] 77 public IList<DetailOrder> DetailOrders 78 { 79 get; 80 set; 81 } 82 } 83 /// <summary> 84 /// 订单服务接口 85 /// </summary> 86 [ServiceContract] 87 public interface IOrderService 88 { 89 /// <summary> 90 /// 查询订单信息 91 /// </summary> 92 /// <param name="orderId"></param> 93 /// <returns></returns> 94 [OperationContract] 95 OrderDTO QueryOrderById(string orderId); 96 } 97 public class OrderService : IOrderService 98 { 99 /// <summary> 100 /// 查询订单信息 101 /// </summary> 102 /// <param name="orderId"></param> 103 /// <returns></returns> 104 public OrderDTO QueryOrderById(string orderId) 105 { 106 MainOrderBll mainOrderBll = new MainOrderBll(); 107 DetailOrderBll detailOrderBll = new DetailOrderBll(); 108 return new OrderDTO() 109 { 110 MainOrderInfo = mainOrderBll.QueryMainOrderById(orderId), 111 DetailOrders = detailOrderBll.QueryDetailOrderByMainId(orderId), 112 }; 113 } 114 }
总结
代码实现是一个比较常见的wcf服务端服务接口代码,相信许多人都用过的。所以会发现原来很多时候有些设计模式我们已经在使用了,只是不知道它的定义或者归类,而当你真正去总结归类的时候,又会发现原先使用的代码可以这样定义的,而且确实有他的道理,是值得学习的。
好了,今天就写这么多了!