写点什么

架构师训练营 - 第二周学习总结

用户头像
清风徐徐
关注
发布于: 2020 年 06 月 17 日

本周主要讲的是框架设计的设计原则和设计模式。

软件设计的“臭味”

  • 僵化性

  • 脆弱性

  • 牢固性

  • 粘滞性

  • 不必要的复杂性

  • 不必要的重复性

软件设计的最终目的

  • 易扩展

  • 健壮性

  • 可移植

  • 易维护

对象

  • 具有状态、行为和标识。

  • 状态:表明每个对象都可以由自己的数据。

  • 行为:表明每个对象可以产生行为。

  • 标志:表明每个对象都区别于其它的对象。(唯一地址)

面向对象编程的描述

万物皆为对象。

程序是对象的集合,通过发送消息来告知彼此要做的事情。

每个对象都有自己的由其它对象所构成的存储。

每个对象都拥有其类型。

某一个特定类型的所有对象都可以接受同样的消息。

面向对象编程三要素(特征)

  • 封装性:隐藏实现接口;定义接口。

  • 继承性:is-a 关系;has-a 关系。

  • 多态性:后期绑定;向上转形(up casting)

充血模型:

充血模型是指大多业务逻辑和持久化放在领域对象里面,service 层只是简单封装部分业务逻辑以及控制事务、权限等。

优点:是面向对象,业务逻辑符合单一职责。

缺点:划分业务逻辑会很含糊,不好管理与拆分模块。

贫血模型:

  贫血模型是指领域对象里只有 get 和 set 方法(POJO),所有的业务逻辑都不包含在内而是放在 service 层。

优点:系统的层次结构清楚,各层之间单向依赖。

缺点:没有真正面向对象编程。

面向对象设计的目的

强内聚,低耦合,使系统易扩展、更健壮、可移植、更简单。

面向对象设计的六大原则

  • 开闭原则(OCP-Open/Closed Principle)

  • 依赖倒置原则(DIP-Dependency Inversion Principle)

  • Liskov 替换原则(LSP-Liskov Substitution Principle)

  • 单一职责原则(SRP-Single Responsibility Principle)

  • 接口分离原则(ISP-Interface Segregation Principle)

  • 合成复用原则(Composite Reuse Principle)

开闭原则-OCP

对修改是封闭的,对扩展是开放的。

实践原则的关键:抽象!

好处:增强了系统健壮性。

依赖倒置原则-DIP

高层模块不能依赖底层模块,而是大家都依赖于抽象。 抽象不能依赖于实现,而是实现依赖于抽象。

即先定义接口,再进行实现;高层模块不直接 new 底层模块,而是通过构造器注入、注解注入等方式将底层模块引入调用,并且要求高层模块定义注入的底层模块是其接口,在外部注入时,才将实际需要用到的实现类注入。

实现原则的关键:接口,依赖被动注入!

好处:增强了系统的可扩展性、可维护性与可测试性。

Liskov 替换原则-LSP

子类型必须能够替换掉它们的基类型。例,父类为会飞的鸟,分别有麻雀、鸵鸟继承了这个父类, 那么对于鸵鸟来说,这个父类就是不适合的。

实现原则的关键:对于子类来说,父类的方法没有不适合的。

重构方向:抽取共性到基类;改成组合。

好处:符合 OCP,增强系统的可扩展性、健壮性。

单一职责原则-SRP

又称为“内聚性原则”,即一个类,只执行一个职责,只能有一个引起它的变化的原因。

实现原则的关键:在做模型设计时,确定明确对象以及相关职责。

好处:增强系统的可移植性、健壮性。

接口分离原则-ISP

不应该强迫客户程序依赖它们不需要的方法。

实现原则的关键:针对不同客户,切割出不同的接口类;针对不同的用户,对接口类实现并封装以适配不同的客户。

好处:系统接口发生变动时,不会影响所有客户。

合成复用原则-CRP

优先使用组合/聚合的方式,而不是使用继承。


基本能理解,希望自己能吸收并引用到实际项目中去。

用户头像

清风徐徐

关注

还未添加个人签名 2019.03.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第二周学习总结