低依赖架构思想

简介: 天上飞的理念,必有落地的实现! 软件系统中一个类中用到了另一个类就产生了依赖,依赖是不可避免的。但我们尽量要降低依赖,以达到高类聚、低耦合的系统架构。低依赖软件系统架构的思想为——依赖倒置,具体可解读为两点:1.上层模块尽量不要依赖于具体的下层模块,而是应该尽量让它们共同依赖于一个抽象。2.抽象尽量不要依赖于具体对象,而是应该具体对象依赖于抽象。

天上飞的理念,必有落地的实现!

      软件系统中一个类中用到了另一个类就产生了依赖,依赖是不可避免的。但我们尽量要降低依赖,以达到高类聚、低耦合的系统架构。低依赖软件系统架构的思想为——依赖倒置,具体可解读为两点:

1.上层模块尽量不要依赖于具体的下层模块,而是应该尽量让它们共同依赖于一个抽象。

2.抽象尽量不要依赖于具体对象,而是应该具体对象依赖于抽象。

以下为一个代码示例如何避免依赖:


要求:设计一个zoo类,引入animal后就输出该animal的信息。



(1)设计一个公共接口animal,该接口只有一个info方法用来输出信息。


public interface animal{


void info();


}


(2)设计一个狗类


public class Dog implemets animal{


@Override


public void info(){


System.out.println("this is a dog!");


}


}


(3)设计一个猫类


public class Cat implemets animal{


@Override


public void info(){


System.out.println("this is a cat!");


}


}


(4)设计一个动物园类,依赖一个animal类,add方法来调用animal的info方法。


public class Zoo{


private animal aml;


public animal getaml(){


return aml;


}


public void setaml(animal aml){


this.aml=aml;


}


public void add(){


this.mal.info();


}


}


(5)测试类


public class Test{


public stataic void main(String[] args){


animal a=new Dog();


a.setaml(a);


a.add();


}


}



输出结果为:


this is a dog!


如果要add其他动物,只用修改测试类中标红的一行即可。


仔细思考可以发现,如果直接依赖一个具体类,如果要切换被依赖的模块要修改很多地方,这里至少要修改private animal以及new这两个位置,这只是一个简单的场景,如果更复杂的系统中修改的地方至少是依赖接口方式的两倍还多。


通过梳理逻辑,我们发现依赖倒置能降低依赖,其实就是将所有具体类交给一个接口管理。将它们归到接口这个类型下面,需要具体实例的时候去绑定。仔细想想,这是不是就是spring的J2EE应用里面常用的分层逻辑?controller,service+impl,mapper?

目录
相关文章
|
供应链 架构师 数据库
架构师带你搞明白微服务进阶场景实战:服务之间的数据依赖问题
数据同步 上面讲解了数据一致性的解决方案,这一篇来讲讲服务之间的数据依赖问题,还是先来说说具体的业务场景。 业务场景:如何解决微服务之间的数据依赖问题 在某个供应链系统中,存在商品、订单、采购这3个服务,它们的主数据部分结构表如下。
架构师带你搞明白微服务进阶场景实战:服务之间的数据依赖问题
|
2月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
|
6月前
|
存储 供应链 安全
区块链技术防止交易被篡改的能力主要依赖于其独特的架构和机制
**区块链技术通过分布式存储、去中心化网络、哈希链接、共识机制及加密算法确保交易防篡改。每个区块含前块哈希,篡改将破坏链式结构;共识机制如PoW、PoS保证交易验证;智能合约增强安全性。多层防护保障数据完整性和安全性,支撑其在多个行业中的应用。**
|
7月前
|
消息中间件 前端开发 测试技术
DDD - 分层架构:有效降低层与层之间的依赖
DDD - 分层架构:有效降低层与层之间的依赖
392 0
|
7月前
|
C#
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
87 0
《软件架构之道》c#实现依赖反转
《软件架构之道》c#实现依赖反转
|
Java Maven
架构:第二章:单一(伪分布式)架构之使用Maven建立各个工程之间的依赖、继承、聚合关系
架构:第二章:单一(伪分布式)架构之使用Maven建立各个工程之间的依赖、继承、聚合关系
架构:第二章:单一(伪分布式)架构之使用Maven建立各个工程之间的依赖、继承、聚合关系
|
SQL 消息中间件 Prometheus
spring cloud 二代架构依赖组件 docker全配置放送
Spring Cloud Alibaba 主要包含 Sentinel、Nacos、RocketMQ、Dubbo、Seata 等组件。 二代引入了 Spring Cloud Alibaba
spring cloud 二代架构依赖组件 docker全配置放送
|
计算机视觉
【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )(二)
【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )(二)
187 0
【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )(二)
|
Ubuntu Java Android开发
【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )(一)
【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )(一)
253 0
【错误记录】NDK 报错 java.lang.UnsatisfiedLinkError 的一种处理方案 ( 主应用与依赖库 Module 的 CPU 架构配置不匹配导致 )(一)