我在网上搜索这个概念的时候,发现在中国还很少有此类文章,外国有一本同名书籍出版,但是无缘拜读。所以这个概念基本是我自己杜撰出来的,只是网上也有同名而已。
先说说,什么是接口。这是个老问题,可是在设计之前,必须先将此定义清楚。
一个常见的定义是,接口就是契约。我认为这个定义非常模糊。契约是约定双方的有一定法律或道德效应的说明。但是,第一,中国人不常定契约,所以不是很能理解其中精髓。第二,此定义还是没有定义出接口的内容特征,因此很多人看了这个定义,还是不理解接口。此定义可以是不合国情,不合民意。
我更倾向于将接口定义为职责(或角色、能力)。职责就是在某种情况下被赋予的权力和义务。在社会应用领域中,使用角色的概念更能深入人心。在英文中使用Role单词。而在普遍意义下,能力大家也能接受。
让我们打个比方。在面向对象分析中,我们分析出来一个人的对象。在其中,我们假定一个实例为韩小明,那么韩小明这个对象应该实现多少个接口呢?
他在公司上班,需要编写代码,因此必须拥有编码的能力。有时候还要参加设计,因此必须同时拥有设计能力。他有了家庭,必须有对家庭负责的能力。有了妻子,要有作为丈夫的能力。当然了,上面的这些能力也可以理解为角色。软件工程师、架构师、丈夫、孩子、父亲等等。
对于韩小明这样一个人(对象),他身上同时拥有多个角色,那么就要实现这么多接口吗?那就要看我们的业务领域涉及哪些了。如果我们只关心他的工作情况,那么也只会涉及软件工程师和架构师这两种角色(接口)。
面向接口设计,就在这个时候开始发挥作用了。
在UML设计中,其实也涉及到了,关于接口的设计,那就是Role,只是没有专门对Role本身进行设计,只是作为一种关系存在而已。方法都转移到了对象上面。在一定意义上,导致接口的设计被人忽略。
重新捋一下我们在做OOA/OOD的过程,分析出对象,静态分析出对象的属性,动态(建模)分析出对象的方法。如果我们将接口的分析和设计过程加入其中,那么我们的流程就变成:分析出对象,分析出属性、分析出接口(角色、能力),分析出方法。接口这个集合处于类和方法之间,恰好是一个非常好的分析工具。
至于面向接口设计的一些原则和方法,相信又将是一篇非常精彩的文章。
在我们还没有被一些新的概念淹没之前,重新看看我们最基本的软件设计,我们经常会发现一些意想不到的收获。面向接口设计如此,其他也是如此。希望这些收获也能对你有所帮助。
查看本文来源