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
  • 相关阅读:
    yum安装报错“rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 1e5e0159”
    EM64T和64位是不是一个概念啊?他们有什么区别啊,怎么区分啊?
    Can't load IA 32-bit .dll on a AMD 64-bit platform
    中间件——Oracle Fusion Middleware
    Does Windows have a limit of 2000 threads per process?
    java8 Lambda Stream操作list,map
    Mybatis优雅存取json字段的解决方案
    网站服务器架构部署方案发展
    springboot flowable Cause: org.xml.sax.SAXParseException; lineNumber: 25; columnNumber: 14; 元素类型为 "include" 的内容必须匹配 "EMPTY"
    java.lang.NoClassDefFoundError: javax/el/ELManager
  • 原文地址:https://www.cnblogs.com/lori/p/2135226.html
Copyright © 2011-2022 走看看