面向对象~如何解除具体依赖

解除依赖就是松耦合,松耦合就一定好吗?当然不是程序的耦合度与内聚度要放在一起说,当然,对于领域层来说,适当的减少类与类之间的依赖是很有必要的,看下面我的这段代码

一个例子,一个订单系统,它根据国家有不同的下单方法,对于低层(DATA层)是一样的,但对于领域层,也叫业务逻辑层,它是不一样的,可能小日本下单打5拍,中国人下单不打折,我也是可以理解的,因为中国石油在对于中国人上是很吝啬的,而对于小日本则慷慨解囊。不多说了,看代码:

    /// <summary>
    /// 订单实体
    /// </summary>
    class Order
    {
 
    }
 
    #region 传统作法,无有考虑约束
    /// <summary>
    /// 针对美国人的订单
    /// </summary>
    class OrderUSA
    {
        public void Insert(Order order) { }
    }
    /// <summary>
    /// 什对日本人的订单
    /// </summary>
    class OrderJPN
    {
        public void Insert(Order order) { }
    }
    class OrderService
    {
        OrderUSA orderAction1 = new OrderUSA();
        public void Insert(Order order)
        {
            orderAction1.Insert(order);
        }
    }
    #endregion
 
    #region 解除具体依赖后的程序
    /// <summary>
    /// 和订单操作相关的接口
    /// </summary>
    public interface IOrderAction
    {
        void Insert(Order order);
        void Delete(Order order);
    }
    /// <summary>
    /// 针对中国人的订单
    /// </summary>
    public class OrderChina : IOrderAction
    {
        public void Insert(Order order)
        {
            throw new NotImplementedException();
        }
        public void Delete(Order order)
        {
            throw new NotImplementedException();
        }
    }
    public class OrderService2
    {
        private IOrderAction iOrderInsert;
        /// <summary>
        /// 根据所传递的接口类型的参数来确定使用哪种对象
        /// </summary>
        /// <param name="_iOrderInsert"></param>
        public OrderService2(IOrderAction _iOrderInsert)
        {
            this.iOrderInsert = _iOrderInsert;
        }
        public void InsertOrder(Order order)
        {
            this.iOrderInsert.Insert(order);
        }
        public void DeleteOrder(Order order)
        {
            this.iOrderInsert.Delete(order);
        }
    }
    #endregion
posted @ 2011-08-11 16:53  张占岭  阅读(575)  评论(3编辑  收藏  举报