架构师训练营 - 软件设计原则
面向对象编程与面向对象分析
面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程面向对象编程特性:封装、继承、多态
面向对象分析是将客观世界,即编程的业务领域进行对象分析充血模型与贫血模型领域驱动模型DDD
面向对象设计的目的强内聚、低耦合,从而使系统易扩展:易于增加新的功能更强壮:不容易被粗心的程序员破坏可移植:能够在多样的环境下运行更简单:容易理解、容易维护
面向对象设计的原则原则独立于语言
面向对象设计的模式设计模式是用于解决某一问题的通用的解决方案也是语言中立的贯彻了设计原则
设计原则 - SOLID
单一职责原则
一个类只有一个引起他变化的原因
类的职责单一
开闭原则
对扩展开放,对修改关闭
不需修改代码就可以增加新功能
使用抽象去编程,如策略模式、适配器模式、观察者模式
里式替换原则
使用父类的地方,都可以用子类进行替换
主要用于衡量抽象或继承是否合理
设计时,类不是为了继承而设计,最好不要去继承他
子类比父类更严格
接口隔离原则
使用者只需关注自己需要使用到的接口
不强迫用户依赖他们不需要的方法
依赖倒置原则
高层不依赖于低层,低层也不依赖于高层,都依赖于抽象,而不依赖具体实现,由使用者来定义自己需要的接口
service(低层)定义接口,controller(高层)去实现接口,这不属于依赖倒置
controller定义自己的抽象,service去实现抽象,这是依赖倒置
常应用于框架的开发,使用框架时不需要调用框架提供的代码,针对框架提供的接口进行编程,框架通过接口调用我们的代码
架构师开发框架,制定规范,让别人依赖此规范进行开发
工作实战
ET6 - 关于trade模块的改造想法:
改造原因:
当前trade模块,形式上定已成面向对象的编程形式,实则依然是面向过程的编程,所有的操作类型的同一功能的处理,交织在一起,这给我们梳理业务逻辑跟出现问题排查制造了困难。
这一点可以从现有的方法跟函数(Operate()/DecodeTradeRequest()/IntegrateResult()等等)上面都能体现。
改造想法:
定义一套trade接口,每种交易类型都是该接口的实现。(所谓的多态)
简单描述一下, 例如:
type Operator interface {
check()
reqToTransArgs()
trade()
integrateResult()
syncCache()
syncDb()
syncEvent()
......
}
改造后会怎样:
1)更清晰的业务逻辑呈现以及如果出现问题方便排查
2)方便错误类型的规整;统一组织sentry的发送
3)方便后期持续开发
评论