https://mp.weixin.qq.com/s/GG6AtBz6KgNwplpaNXfggQ

大型 web 前端架构设计-面向抽象编程入门

曾探 腾讯技术工程 2021-01-04
 

依赖反转原则

依赖反转原则的核心思想是:内层模块不应该依赖外层模块,它们都应该依赖于抽象。

尽管我们会花很多时间去考虑哪些模块分别放到内层和外层,尽量保证它们处于单向依赖关系。但在实际开发中,总还是有不少内层模块需要依赖外层模块的场景。

比如在 Localstorge 和 Indexdb 的例子里,User 模块作为内层的核心业务逻辑,却依赖了外层易变的 Localstorge 和 Indexdb 模块,导致 User 模块变得不稳定。

import ‘localstorge’ from 'localstorge';

class User{
    save(){
        localstorge.save('xxx');
    }
}

const user = new User();
user.save();

缺图

为了解决 User 模块的稳定性问题,我们引入了 DB 抽象接口,这个接口是相对稳定的,User 模块改为去依赖 DB 抽象接口,从而让 User 变成一个稳定的模块。

Interface DB{
   save(): void;
}

然后让核心业务模块 User 仅仅依赖这个接口:

import DB from 'DB';

class User{
    constructor(
        private db: DB
   ){

    }
    save(){
        this.db.save('xxx');
    }
}

接着让 Localstorge 和 Indexdb 分别实现 DB 接口:

class Localstorge implements DB{
    save(str:string){
        ...//do something
    }
}

依赖关系变成:缺图

User -> DB <- Localstorge

在图 1 和图 2 看来,User 模块不再显式的依赖 Localstorge,而是依赖稳定的 DB 接口,DB 到底是什么,会在程序后期,由其他外层模块将 Localstorge 或者 Indexdb 注入进来,这里的依赖关系看起来被反转了,这种方式被称为“依赖反转”。

最新文章

  1. 移动端横屏(beta)
  2. PHP 回调、匿名函数和闭包
  3. unity, monodevelop 不安全的代码只会在使用/unsafe编译的情况下出现
  4. VS里面如何设置环境默认的开发语言
  5. SpeedPHP关于一对一和一对多关联关系的建立 model建立
  6. Spark第一个研究笔记1一片 - Spark一个简短的引论
  7. MySql主从配置实践及其优势浅谈
  8. 关于python中的pickle函数
  9. 关机,重启BAT命令
  10. C++版 - UVa1585 Score - 题解
  11. mysql5.7.17源码安装
  12. 哈尔特征Haar
  13. js 的运算
  14. CSS解决字母不换行
  15. Unable to find CMake in android studio
  16. Debian Security Advisory(Debian安全报告) DSA-4403-1 php7.0
  17. QR 编码原理(三)
  18. uml用例关系
  19. linux安装Anconda
  20. UVa 12325 宝箱

热门文章

  1. [AspNetCore3.1] 使用Serilog记录日志
  2. 【命令】man命令帮助文档详解
  3. [.NET] - OleDb读取CSV文件:使用指定的分隔符号
  4. ssms导入excel数据提示未安装插件的解决方法
  5. java.lang.NoSuchMethodError的解决办法
  6. CentOS7安装Elasticsearch7
  7. 基于注解的实现获取微信openId1
  8. Java学习日报7.13
  9. 解析STM32的库函数
  10. 项目实战--Stream流实现字符串拼接