架构师养成第二课
编程发展历史
第一阶段:面向机器编程。从纸带打孔编程到汇编语言,编写的程序直接在机器上执行。
第二阶段:面向劳动者编程。使用高级语言实现逻辑,解决开发者按照逻辑编写程序的问题。
第三阶段:面向业务领域编程。面向对象编程,DDD 领域驱动设计按照领域对象进行编程。
面向对象的三要素(特征)
封装
隐藏实现细节
定义和开放接口
继承
Has-A 关系(组合)
Is-A 关系
多态
后期绑定
向上转型
面向对象编程
面向对象编程不是指使用面向对象语言实现编程,而是利用多态特性进行编程
面向对象分析
面向对象分析是将客观世界,即编程的业务领域进行对象分析
领域驱动设计 DDD
充血模型与贫血模型
面向对象设计
面向对象设计的目的是,设计出强内聚,低耦合的系统,从而使系统:
易扩展 - 易于增加新的功能
更强壮 - 不容易被低级错误损坏
可移植 - 能够在多样的环境下运行
更简单 - 容易理解,容易维护
面向对象设计的原则
为了达成设计目标,前人总结出多种指导设计和编码的原则
原则是独立于编程语言的,甚至也可用于非面向对象的编程语言中
代码坏味道的特点
僵硬 - 不易改变
脆弱 - 只想改 A,结果 B 被意外破坏
不可移植 - 不能适应环境变化
导致误用的陷阱 - 做错误的事比做正确的事容易,引诱程序员破坏原有的设计
晦涩 - 代码难以理解
过度设计
拷贝代码
SOLID 设计原则
OCP 开闭原则:对扩展开放,对修改关闭,保持系统的可维护性
DIP 依赖倒置原则:高层不依赖低层,低层不依赖高层,两者共同依赖高层主导的抽象,使用共同的抽象层进行松耦合,常用于指导框架设计
LSP 里式替换原则:用到父类的地方,都可以使用其子类进行替换,用于验证继承的合理性。需要注意的是,判断继承是否合理需要代入实际的业务场景,而非静态分析。举例:马<|--小马,人骑马,小马不能被骑,所以不满足里式替换,该继承不合理
SRP 单一职责原则:内聚性原则,一个类中如果存在多个引起变化的因素,则应该将这个类进行拆分。举例:计算方法包含了计算和打印两部分,而部分调用方仅需计算结果,因此需要将计算拆成两部分
ISP 接口隔离原则:不应强迫调用者看到他不关心的接口方法,如果一个类聚合了多重角色的调用者,可以考虑使用接口隔离,即实现多个接口的方式,为不同调用者提供不同的接口。
设计模式
设计模式是用于解决某一类问题的通用解决方案;
设计模式语言中立,贯彻了设计原则;
23 种基本设计模式:
创建模式
行为模式
结构模式
其它领域的设计模式:
并发编程模式
JAVA EE 模式
版权声明: 本文为 InfoQ 作者【万有引力】的原创文章。
原文链接:【http://xie.infoq.cn/article/32b97af93db99618e68d178ad】。未经作者许可,禁止转载。
评论