架构师训练营 Week02 summary 软件设计原则

正如智慧老师所讲, 不想苦大仇深的去讲网上找的到的技术应用,而是希望大家能 get 到点,所有总结会有选择的列出概念,更多的是有闪光点的观点
编程语言的实质: 抽象现实世界
对象:领域问题中的对象,没有行为的对象无法面向对象编程
DDD:使用的对象是充血模型, 是面向对象编程的落地实践
面向对象真正的特性是多态, 如果没用到那么只是在用面向对象的语言写面向过程的代码
我们大部分时间只是使用面向对象的语言做面向过程的代码
马克思的劳动价值理论
eg: 人(劳动者), 计算机(劳动工具),客观业务领域(劳动对象)
工具被调用, 框架主动调用你的代码
eg: junit 是框架, log4j 是工具
OCP Open/Closed Principle 开闭原则
关键是抽象,通过抽象实现多态
对扩展开放
对更改封闭
不需要修改实体, 类, 模块, 函数, 就能实现功能的扩展
DIP Dependency Inversion Principle 依赖倒置原则 ()好莱坞原则:don't call me and I'll call you)
高层模块不能依赖底层模块,而是依赖于抽象
抽象不能依赖于实现,而是实现依赖抽象
高层定义接口,低层实现接口
eg: controller 就是高层, service 就是低层
目前普遍项目的做法是 controller 依赖于 service 的代码,这并不符合依赖倒置的原则, 因为高层依赖了低层的代码或接口, 其实符合 DIP 的做法应该是 controller 定义接口, service 实现(其实我觉得,代码上来看就是 service interface 改变名字为 controllerRegister 的改变,但是整个逻辑上的控制就转变为了高层定义接口,底层实现了)
eg:李智慧老师举例说他们的团队就是前端定义接口,这也是符合 DIP 原则的
LSP Liskov 里氏替换原则
子类型必须能替换基类型
LSP 要在场景中看能不能替换, IS-A 关系是关于行为的,eg: 按理说正方形是一个长方形,实际上按照行为来看, 正方形和长方形是不同的,(分别 set width height area 值不是预期)
契约角度: 子类不能比父类更严格
通常代码中出现 else 一定有设计问题
SRP Single Responsibility Principle 单一职责原则
一个类只能有一个引起他的变化的原因
实现类如果分不开可以通过接口分离
ISP Interface Segregation Principle 接口分离原则:
不要让用户看到他们不需要用的方法
评论