架构师训练营第一期第 2 周作业及总结
一.依赖倒置原则(DIP)的理解:
1.高层实现不能依赖于低层实现.如果直接依赖这样会导致 2 个实现之间的高耦合,低层代码的修改会影像到高层.
2.为高层实现创建接口,高层只调用其接口而不直接调用低层代码;低层代码实现高层定义的接口,这样高层依赖低层的关系就变为低层依赖高层接口的关系,这就是依赖倒置.
3.依赖倒置后随便低层代码的变动或功能的新增都不会破坏高层代码及其接口的代码不变性,只要心的低层代码实现高层代码的接口即可被高层调用.
4.利用依赖倒置原则可以设计出一些框架,框架本身是稳定的,跟业务无耦合的,用框架开发业务实现时只要实现框架定义好的接口即可被框架调用.
二.Don't call me,I will call you . 好莱坞原则
1.DIP 原则和好莱坞里的演员被导演或公司呼叫被动工作,而不能主动联系导演或公司的原则很像,都是被高层接口调用,在框架层面就是我们不需要调用框架代码,而只能被框架代码调用.
三.我实际工作中接触的 DIP
1.在我的实践中,我是基于 GRPC 框架开发的服务器,我只要实现了 ProtoBuffer 定义的接口做业务逻辑,实现我需要的过滤器接口如:鉴权过滤,用户设备或 IP 过滤等.
当有请求到服务器,GRPC 框架会从监听端口收到请求头和请求体解析,并调用我实现的过滤器,再调用我实现的接口,从而完成一次 Http 请求.
四.DIP 对未来工作设计思路的思考
1.当前我为公司设计的 GO Web 服务端的各个微服务总中,逻辑层是直接访问数据库层的,比如逻辑层总直接访问 mysql,mongodb,redis. 这样就形成了直接依赖,当我想把 mongodb 换成 es 时,就必须改动逻辑层,形成强耦合,也不符合 DIP 原则.
2.在后续的工作中抽空把这块进行小重构,为逻辑层的代码设计一个接口层,逻辑层访问数据库的代码都只访问其接口中的方法来访问数据库,数据库层实现其接口,这样就实现了依赖倒置,当需要换数据库实现时 对逻辑层无需改一行代码,改动对高层不可见,从而提高系统的稳定性,降低了耦合性.
五.第二周作业 Cache 类的设计图:
类图设计 2 个接口:
1.ICacheOperate 接口给应用程序使用,以实现基本的增删查功能,但并不暴露敏感的 reBuild 方法.
2.ICacheConfig 接口只给配置服务调用,实现在线热更配置.
通过这 2 个接口实现依赖倒置及接口隔离,给每个调用方暴露他需要的方法隐藏不需要的方法.
评论