zoukankan      html  css  js  c++  java
  • 面向对象~如何解除具体依赖

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

    一个例子,一个订单系统,它根据国家有不同的下单方法,对于低层(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
  • 相关阅读:
    k8s问题收集
    kubeadm简单安装k8s
    centos7 --kubeadm安装
    K8S各知识点整理
    【转载】dfs序七个经典问题
    ZJOI 2018 一试记
    【模板】高精度
    【科技】扩展欧几里得 + 逆元
    【模板】ISAP最大流
    【模板】最小费用最大流
  • 原文地址:https://www.cnblogs.com/lori/p/2135226.html
Copyright © 2011-2022 走看看