架构师训练营第二周总结

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

编程语言的发展历史

程序是先于计算机出现,通过二进制进行计算,所有的计算都基于二进制数据,既包含数据也包含逻辑。

程序=指令+数据

  • 面向机器编程:关注的是机器本身和cpu的指令,如机器语言、汇编。

  • 面向过程编程:面向人的逻辑的编程,如C语言。

  • 面向对象编程:面向问题领域编程,对现实对象和软件系统的抽象 java、C++。

面向对象的三大特性

  • 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

  • 继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

  • 多态:指一个类实例(对象)的相同方法在不同情形有不同表现形式。具体形态运行期决定,是面向对象的核心特性。

领域模型

  • 充血模型:领域对象中既包括状态,又包括行为,是最符合面向对象的设计方式。

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

什么是对象

  • 状态:每个对象包含自己的数据

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

  • 唯一标识:表明每个对象区别于其他对象

框架

框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计和实现

  • 为了让架构落地,封装具体相关功能((流程性、通信类通用代码)),细节简化开发,让开发专注业务层开发,只关心具体相关数据的处理。

  • 可复用,可在不同业务领域去使用

框架和工具

  • 框架用来调用程序代码,用框架来保证架构的落地

  • 工具用来提高开发效率,应用程序调用工具代码

框架:junit(测试代码基于junit框架去调用)、spring、tomcat

工具:log4j(log4j只是用来被调用)

软件设计的目的

最终目的是达到"强内聚、低耦合",可使用该标准来判断软件设计的优劣,用来度量一个类或者模块紧密达到单一目的和责任。

当一个模块或者类被设计成只支持一组相关功能时,我们就说它具有高内聚;反之,当被设计成支持一组不相关的功能时,则称为低耦合.

  • 易扩展:对新功能的添加是友好的,不会影响到原来的功能

  • 更强壮:能应对复杂的场景和异常数据的输入

  • 可移植:能在各个场景和环境下进行复用和运行

  • 更简单:容易理解和维护

要想让软件有更强的生命力,还是需要通过不断的重构来优化系统的设计

设计原则

  • 开/闭原则

  • 对于扩展是开放的

  • 对于扩展是开放的

可通过策略模式、适配器模式、观察者模式等模式来优化设计

  • 依赖倒置原则上层模块不应该依赖底层模块,应依赖于抽象。

  • 抽象不应该依赖于细节,细节应该依赖于抽象。

  • 里氏代换原则

  • 任何基类可以出现的地方,子类一定可以出现。

Properties(只针对String类型)、Stack(先进后出)违反了LSP,设计原则是指导性原则

  • 单一职责

  • 不要存在多于一个导致类变更的原因。

  • 可通过拆小类和方法,慢慢进行优化,对重复性代码进行复用

  • 接口隔离原则

  • 客户端不应该依赖它不需要的接口

  • 类间的依赖关系应该建立在最小的接口上



用户头像

allen

关注

还未添加个人签名 2019.02.26 加入

还未添加个人简介

评论

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