写点什么

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

用户头像
Nick
关注
发布于: 2020 年 06 月 17 日
架构师训练营 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 接口分离原则:

  • 不要让用户看到他们不需要用的方法

用户头像

Nick

关注

还未添加个人签名 2018.05.01 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 Week02 summary 软件设计原则