zoukankan      html  css  js  c++  java
  • 外观模式

    定义

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

    类图

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

    代码

      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
    收藏
    关注
    评论
  • 相关阅读:
    IIS中的 Asp.Net Core 和 dotnet watch
    net Core 2.0应用程序发布到IIS
    PHP是.NET上的一门开发语言
    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用
    如何快速处理线上故障
    程序员的“认知失调”
    怎么轻松学习JavaScript
    Android-完全退出当前应用程序的四种方法
    Android java.lang.ClassCastException
    Intent传递对象的两种方法(Serializable,Parcelable)
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4890604.html
Copyright © 2011-2022 走看看