加入收藏 | 设为首页 | 会员中心 | 我要投稿 鞍山站长网 (https://www.0412zz.com/)- 应用安全、运维、云计算、5G、云通信!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

哪种人是软件设计中的稀缺型人才?

发布时间:2019-11-08 04:17:57 所属栏目:评测 来源:从码农到工匠
导读:好的系统架构离不开好的接口设计,因此,真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。 为什么在接口制定标准中说:一流的企业做标准,二流的企业做品牌,三流的企业做产品?依赖倒置到底是什么意思?什么时候使用接口才算合理?今天,阿里匠人张建
副标题[/!--empirenews.page--]

哪种人是软件设计中的稀缺型人才?

好的系统架构离不开好的接口设计,因此,真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。

为什么在接口制定标准中说:一流的企业做标准,二流的企业做品牌,三流的企业做产品?依赖倒置到底是什么意思?什么时候使用接口才算合理?今天,阿里匠人——张建飞将为你详细解读。

接口有什么好处(Why)

在我看来,接口在软件设计中主要有两大好处:

1. 制定标准

标准规范的制定离不开接口,制定标准的目的就是为了让定义和实现分离,而接口作为完全的抽象,是标准制定的不二之选。

这个世界的运转离不开分工协作,而分工协作的前提就是标准化。试想一下,你家的电脑能允许你把显卡从NVIDIA换成七彩虹;你家的灯泡坏了,你可以随便找一个超市买一个新的就可以换上;你把数据从Oracle换成了MySQL,但是你基于JDBC写的代码都不用动。等等这些事情的背后都是因为接口,以及基于接口定制的标准化在起作用。

在Java的世界里,有一个很NB的社区叫JCP( Java Community Process),就是专门通过JSR(Java Specification Request)来制定标准的。正是有了JSR-315(Java Servlet),我们服务端的代码才能在Tomcat和Jetty之间自由切换。

哪种人是软件设计中的稀缺型人才?

最后,我想用一句话来总结一下标准的重要性,那就是:“一流的企业做标准,二流的企业做品牌,三流的企业做产品。

2. 提供抽象

除了标准之外,接口还有一个特征就是抽象。正是这样的抽象,得以让接口的调用者和实现者可以完全的解耦。

解耦的好处是调用者不需要依赖具体的实现,这样也就不用关心实现的细节。这样,不管是实现细节的改动,还是替换新的实现,对于调用者来说都是透明的。

这种扩展性和灵活性,是软件设计中,最美妙的设计艺术之一。一旦你品尝过这种“依赖接口”的设计来带的美好,就不大会再愿意回到“依赖实现”的简单粗暴。平时我们说的“面向接口编程原则”和“依赖倒置原则”说的都是这种设计。

另外,一旦你融会贯通的掌握了这个强大的技巧——面向抽象、面向接口,你会发现,虽然面向实现和面向接口在代码层面的差异不大,但是其背后所隐含的设计思想和设计理念的差异,不亚于我篮球水平和詹姆斯篮球水平之间的差异!

  1. //面向接口 
  2.     Animal dog = new Dog(); 
  3.  
  4.     //面向实现 
  5.     Dog dog = new Dog(); 

作为一名资深职场老兵,我墙裂建议各位在做系统设计、模块设计、甚至对象设计的时候。要多考虑考虑更高层次的抽象——也就是接口,而不是一上来就陷入到实现的细节中去。要清楚的意识到接口设计是我们系统设计中的主要工作内容。而这种可以跳出细节内容,站在更高抽象层次上,来看整个系统的模块设计、模块划分、模块交互的人,正是我们软件设计队伍中,非常稀缺的人才。有时候,我们也管这些人叫架构师。

什么时候要用接口(When)

有扩展性需求的时候

可扩展设计,主要是利用了面向对象的多态特性,所以这里的接口是一个广义的概念,如果用编程语言的术语来说,它既可以是Interface,也可能是Abstract Class。

这种扩展性的诉求在软件工作中可以说无处不在,小到一个工具类。例如,我现在系统中需要一个开关的功能,开关的配置目前是用数据库做配置的,但是后续可能会迁移到Diamond配置中心,或者SwitchCenter上去。

简单做法就是,我直接用数据库的配置去实现开关功能,如下图所示:

哪种人是软件设计中的稀缺型人才?

但是这样做的问题很明显,当需要切换新的配置实现的话,就不得不扒开原来的应用代码做修改了。更恰当的做法应该是提供一个Switch的接口,让不同的实现去实现这个接口,从而在切换配置实现的时候,应用代码不再需要更改了。

哪种人是软件设计中的稀缺型人才?

如果说,上面的重构只是使用策略模式对代码进行了局部优化,做了当然更好,不做的话,影响也还好,可以将就着过。

那么接下来我要给大家介绍的场景,就不仅仅是“要不要”的问题,而是“不得不”的问题了。

例如,老板给你布置了一个任务,实现一个类似于eclipse可以可插拔(Pluggable)的产品,此时,使用接口就不仅仅是一个选择问题了,而是你不得不使用的架构方法了。因为,可插拔的本质就是,你制定一个标准接口(API),然后有不同的实现者去做插件的实现,最后再由PluginManager把这个插件机制串起来而已。

下图是我当时给ICBU设计的一个企业协同云的Pluggable架构,其本质上,也就是基于接口的一种标准和扩展的设计。

哪种人是软件设计中的稀缺型人才?

需要解耦的时候

上面介绍的关于Switch的例子,从表面上来看,是扩展性的诉求。但不可扩展的本质原因正是因为耦合性。当我们通过Switch Interface来解开耦合之后,扩展性的诉求也就迎刃而解了。

(编辑:鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读