写点什么

「架构师训练营 4 期」 第二周 - 0201

用户头像
凯迪
关注
发布于: 2021 年 01 月 10 日

作业一

1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

2. 请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。



答案

第一题

Q:请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?


在答复什么是依赖导致原则之前,我们先说一下本周学习的的主要内容:软件设计原则,主要介绍了

  • 依赖倒置原则

  • 单一职责原则

  • 接口隔离原则

  • 开闭原则

  • 里是替换原则

这里面依赖导致原则是框架设计中主要的指导原则。


从定义看 DIP(原文:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions)。

第一,高层模块不应该依赖底层模块,无论是高层模块还是底层模块都应该依赖于他们的抽象;

第二,抽象本身不应该依赖于实现,而是应用本身的开发实现依赖于抽象。


这里被称为好莱坞原则, 是因为一个好莱坞原则为 “Don't call me,I'll call you.”,也就是说框架不用去主动找应用去实现,应用在需要实现业务逻辑的时候回找(依赖)框架本身的抽象。以 kratos 框架为例(go 语言基于 gin 框架进行优化),这里面除了 gin 自带的 engin,定义了 interface 来更好的封装业务代码开发,而。


// package 命名使用 {appid}.{version} 的方式, version 形如 v1, v2 ..package api
……type DemoClient interface { Ping(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) SayHello(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) SayHelloURL(ctx context.Context, in *HelloReq, opts ...grpc.CallOption) (*HelloResp, error)}
type demoClient struct { cc *grpc.ClientConn}
复制代码


第二题

Q : 请用接口隔离原则优化 Cache 类的设计,画出优化后的类图

本题之前先介绍一下什么是接口隔离原则 ISP,不应该强迫应用依赖他们不需要的方法,从原则出发,基于课堂的实例有两个方法来优化该 cache 类,第一种是适配器,第二种是多继承,如下。

适配器


多继承


总结

软件设计的本身是为了能够让程序通过上面一些列原则实现让我们的系统能够具备强内聚、低耦合,使系统易扩展、更强壮、可移植、更简单一系列特性,,能够让我们的系统在当前高速发展且业务复杂的背景下,更好更稳的快速发展和迭代,日常工作中可以从以下几点更好的理解和提高。

  1. 学习已有的语言框架,了解框架设计的模式和设计的理念

  2. 在第一步的基础上,尝试编写和完善自己的框架

  3. 并行学习业内的主要的软件设计,基于业务场景及业务痛点进行分析和落地。

发布于: 2021 年 01 月 10 日阅读数: 28
用户头像

凯迪

关注

还未添加个人签名 2020.06.01 加入

还未添加个人简介

评论

发布
暂无评论
「架构师训练营 4 期」 第二周 - 0201