写点什么

架构师 0 期 | 架构师怎样实现架构目标?

用户头像
刁架构
关注
发布于: 2020 年 06 月 17 日
架构师 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.

不要来调用我,我会调用你。

即不用主动调用我,当需要的时候,我自动会调用你,来通知到你。



发布于: 2020 年 06 月 17 日阅读数: 85
用户头像

刁架构

关注

叫我刁架构 2017.10.25 加入

预备备网红首席架构师,移动端开发者,边缘设计支持者。

评论 (2 条评论)

发布
用户头像
未实现接口隔离原则优化cache类
2020 年 06 月 23 日 21:20
回复
恩恩,已经补上了~
2020 年 07 月 19 日 23:56
回复
没有更多了
架构师 0 期 | 架构师怎样实现架构目标?