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


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

    一个例子,一个订单系统,它根据国家有不同的下单方法,对于低层(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
  • 相关阅读:
    Oracle专家高级编程 第二章 服务器和文件
    Oracle专家高级编程 第一章
    Leetcode 4 寻找两个正序数组的中位数
    Leetcode 3 无重复字符的最长子串
    Leetcode 2 两数相加
    Leetcode 1 两数之和
    gitee开源许可证
    js新特性展开符的使用方式
    webpack高速配置
    JS中日期比较时斜杠与横杠的区别
  • 原文地址:https://www.cnblogs.com/lori/p/2135226.html
Copyright © 2020-2023  润新知