架构师 0 期 | 架构师怎样实现架构目标?
前言
优秀的程序员和糟糕的程序员区别?
最大的差别体现在应对需求变更能力上。
差的程序员怕需求变更,因为每次变更都会导致无尽的bug,而好的程序员则欢迎需求变更。因为从一开始就是针对需求变更进行的软件设计,如果需求不变更,那么优秀的设计就没了用武之地,反而有点空落落。再说一个好的系统,一定是不断演化来的,需求变更是个永恒的话题。
而这2种不同态度的背后,是设计能力的差异。
软件设计的目的
强内聚,低耦合
易拓展
更强壮
可移植
更简单
框架和工具的区别
做架构师是写框架,是定义规范,不是单单的提供工具,供开发者调用。
趣事:当前阿里的员工,听到这个框架的使用方式是提供一堆API供开发者调用时,第二天就离职了。[Doge]
工具:提供功能。 例子:log4j
框架:定义规范 例子:Junit
软件设计原则
开闭原则(核心原则,方向性的)
为需求变更而设计的,对扩展是开放的,对修改是关闭的。
当有变更时,不需要修改原先的代码,但是可以对模块(类、函数等)进行扩展,使其满足变更要求。
当我们在代码里面看到 else 或者 switch/case 关键字时,基本就可以判断违背了这条原则了。
那如何解决呢?
实现开闭原则的关键是:抽象。
当需求变更时,利用接口的 多态性,通过增加一个新实现类就能完成需求。
策略模式
用来解决软件拓展性问题的。
在2个类之间增加抽象接口,当有新需求时,增加新的策略接口。
适配器模式
是一种结构模式,用于将2个不匹配的接口适配起来。
观察者模式
解决1对多问题。
开放订阅,当被观察者的行为有变化时,将发送通知给到订阅了此变化通知的所有对象。方便随时拓展新添加进来的对象。而不用修改原来的代码。
模板方法模式
在父类中用抽象方法定义计算的骨架和过程,而抽象的方法和实现则留在子类中。
依赖倒置原则(DIP)
上面说到框架是定义规范的,我们开发过程中用到的比如Spring、Mybatis、Tomcat、Jetty等框架都是这么做的,使用者无需调用他们的方法,就能使用他们的功能。
是不是很神奇,核心关键就是使用到了依赖倒置原则。
依赖倒置原则定义
高层模块不应该依赖底层模块,二者都应该依赖抽象。
抽象不应该依赖具体实现,具体实现应该依赖抽象。
软件高层指的是方法调用方。
针对一个项目来说,值钱的地方在高层,即业务层。这些功能实现了公司的核心业务。
传统的软件写法是,底层方法库实现一个功能,供高层调用。这样做有一个弊端是,当底层技术变更,比如更换数据库等,高层的业务层就得修改,牵一发动全身。
使用依赖倒置原则,可以开发出依赖更少,低耦合,可复用的代码。
关键是接口所有权的倒置
高层模块定义一个抽象接口,低层模块去实现这个接口。
高层模块通过抽象接口使用低层模块。
接口的所有权被倒置的,接口所有权归高层,低层去实现。
即调用方制定接口,低层实现。
如果低层更换,只需实现接口即可,高层无感。
实现高层模块复用
而且高层模块也增加了复用性,不依赖低层。
高层提供抽象接口,当有类似的功能时,可以复用高层代码,只需实现高层提供的接口,则可以复用高层代码,并可根据实际情况实现不同效果的。
好莱坞原则
Don't call me, I will call you.
不要来调用我,我会调用你。
即不用主动调用我,当需要的时候,我自动会调用你,来通知到你。
版权声明: 本文为 InfoQ 作者【刁架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/bc067eb4b6ad0611207a48fc0】。文章转载请联系作者。
评论 (2 条评论)