外观模式

定义

根据需要将子系统的实现封装成接口提供给其他业务使用,即将细粒度的对象包装成粗粒度的对象。

类图

这只是一个实现类的类图形式展现,也许不能表达出外观模式的用意。详情请看代码:

代码

  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服务端服务接口代码,相信许多人都用过的。所以会发现原来很多时候有些设计模式我们已经在使用了,只是不知道它的定义或者归类,而当你真正去总结归类的时候,又会发现原先使用的代码可以这样定义的,而且确实有他的道理,是值得学习的。

好了,今天就写这么多了!

Top
收藏
关注
评论
原文地址:https://www.cnblogs.com/Joy-et/p/4890604.html