架构师训练营第二周总结
编程语言的发展历史
程序是先于计算机出现,通过二进制进行计算,所有的计算都基于二进制数据,既包含数据也包含逻辑。
程序=指令+数据
面向机器编程:关注的是机器本身和cpu的指令,如机器语言、汇编。
面向过程编程:面向人的逻辑的编程,如C语言。
面向对象编程:面向问题领域编程,对现实对象和软件系统的抽象 java、C++。
面向对象的三大特性
封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
多态:指一个类实例(对象)的相同方法在不同情形有不同表现形式。具体形态运行期决定,是面向对象的核心特性。
领域模型
充血模型:领域对象中既包括状态,又包括行为,是最符合面向对象的设计方式。
贫血模型:领域对象里只有get和set方法(POJO),所有的业务逻辑都不包含在内而是放在业务逻辑层。
什么是对象
状态:每个对象包含自己的数据
行为:每个对象可以产生行为
唯一标识:表明每个对象区别于其他对象
框架
框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计和实现
为了让架构落地,封装具体相关功能((流程性、通信类通用代码)),细节简化开发,让开发专注业务层开发,只关心具体相关数据的处理。
可复用,可在不同业务领域去使用
框架和工具
框架用来调用程序代码,用框架来保证架构的落地
工具用来提高开发效率,应用程序调用工具代码
框架:junit(测试代码基于junit框架去调用)、spring、tomcat
工具:log4j(log4j只是用来被调用)
软件设计的目的
最终目的是达到"强内聚、低耦合",可使用该标准来判断软件设计的优劣,用来度量一个类或者模块紧密达到单一目的和责任。
当一个模块或者类被设计成只支持一组相关功能时,我们就说它具有高内聚;反之,当被设计成支持一组不相关的功能时,则称为低耦合.
易扩展:对新功能的添加是友好的,不会影响到原来的功能
更强壮:能应对复杂的场景和异常数据的输入
可移植:能在各个场景和环境下进行复用和运行
更简单:容易理解和维护
要想让软件有更强的生命力,还是需要通过不断的重构来优化系统的设计
设计原则
开/闭原则
对于扩展是开放的
对于扩展是开放的
可通过策略模式、适配器模式、观察者模式等模式来优化设计
依赖倒置原则上层模块不应该依赖底层模块,应依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
里氏代换原则
任何基类可以出现的地方,子类一定可以出现。
Properties(只针对String类型)、Stack(先进后出)违反了LSP,设计原则是指导性原则
单一职责
不要存在多于一个导致类变更的原因。
可通过拆小类和方法,慢慢进行优化,对重复性代码进行复用
接口隔离原则
客户端不应该依赖它不需要的接口
类间的依赖关系应该建立在最小的接口上
评论