架构师训练营第二周框架设计学习总结
架构师训练营第二周框架设计主要学习了以下内容:
面向对象编程的三个特性:封装/继承/多态
程序就是一些对象集和它们之间的交互关系
所有有动作的名词都是潜在对象
好的设计必须support持续变更
软件设计的最终目的,是使软件达到“强内聚、松耦合”,从而使软件:
• 易扩展-易于增加新的功能
• 更强壮-不容易被粗心的程序员破坏 ,逻辑清晰,不需要在复杂的if/else里寻找代码去修改
• 可移植-能够在多样的环境下运行
• 更简单-容易理解、容易维护
程序是给计算机运行的,但是是给人阅读的
软件要放到软件开发的上下文中考虑,软件开发的上下文就是不断变更的需求
软件设计中的几个常用原则:
OCP开闭原则
对扩展是开放的
对更改是封闭的
简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展。
关键是抽象
依赖倒置原则(DIP):框架设计必须遵循的原则
高层模块不能依赖低层模块,而是大家都依赖于抽象;
抽象不能依赖实现,而是实现依赖抽象
高层模块定义接口,底层模块实现接口
框架不依赖于代码,框架定义接口,代码实现接口,框架调用代码
Liskov替换原则(LSP):考量继承是否合理的一个重要原则
子类继承父类: 子类 is-a 父类
针对父类编写的程序,用子类替换掉后,程序功能不变
使用父类的场景都能用子类来替换父类:例子:正放形不是长方形的子类
如果else if太多了,可能代码有问题
组合优先于继承
单一职责原则:一个类应该只有一个引起它变化的原因/只有一个职责:rectangle
接口分离原则(ISP): 从客户的角度出发设计一个类的接口,不要让客户看到不需要看到的方法:一个很好的例子:火车站窗口总是挤满了排队的人,而排队的人并非都是为了买票,有的 是咨询,有的是退票,但都必须排在这一长长的队伍中,显然安排不同的窗口处理不同的业务会大大提高效率。
不应该强迫应用程序依赖不需要的方法:定时开关门/web cache
方法:
适配器
多继承:实现类实现多个接口,不同的应用场景,使用不同的接口
反应式编程:用异步操作去除阻塞改善系统性能,线程是昂贵的资源,用有限的线程处理更多的并发。很有意思的一件事是我在学习这门课之前并不知道反应式编程这个概念,但是,为了提升性能和提高扩展性,我带领团队开发分布式测试系统时就采用的异步通信,碰巧用了反应式编程。整个系统是消息驱动的异步通讯:job service收到用户测试请求,就它把放入请求队列,resource service为队列里的请求分配测试资源,然后,把分好资源的请求放入任务队列,task service创建线程去执行任务队列里的任务,report service 和 dashboard service监听任务完成状态,并作相应操作。
评论