面向接口的编程

来源:互联网 发布:手机淘宝积分怎么看 编辑:程序博客网 时间:2024/04/30 04:59

    很久就想写这篇文章了,一直没有提笔,主要是怕自己把握得不好,毕竟,“面向接口”这个主题既有思想层面上的内涵韵味,也有具体实现上的操作技巧。

    这篇文章也就从这两个方面来谈吧:1 面向接口的思想;2 面向接口的实现。

    1 面向接口的思想

     Interface,这个词可以说是被我们用烂了的一个词,它大概是在软件设计开发整个过程中听得最多的一个词之一,尽管在不同场合其具体所指不同,然而,所有的“接口”都具有相同的特征:对外的一种暴露。我不知道说“暴露”这个词,你是否还是觉得有点不好听,那么就用“提供”这个词吧。举个例子吧,我们电脑的主机,被机箱盒给封装了起来,然后向我们提供电源按钮让我们开启机器,提供USB插口让我们连接U盘,提供网线插口,让我们连接网络,提供显示器连接插口,让我们连接显示器......这些插口,都是主机暴露给我们的接口,这些硬件接口给了我们操作主机的能力。试想,如果主机什么都不暴露,那主机就成为了一个完全封闭的东西,而一个封闭的东西与一堆垃圾一样毫无意义。

    从马哲的角度上来说上面这段话的意思就是任何东西都需要对外暴露“接口”来与其他东西发生联系,一个孤立的东西是没有存在价值和意义的。那么如何暴露接口呢?

   在企业管理,尤其是市场营销这一领域,我们常听到一个词:“面向客户”,在软件开发中同样如此。是的,我们之所以提供接口,目的是让“客户程序”(不管是你自己写,还是别人写的)来使用自己所写的程序。我们总是在谈组件化,组件化的本质就是将自身逻辑封装,让后对外暴露接口,组件的价值就在其暴露的接口是否有价值。在面向过程编程中,函数的声明是其对外提供的接口,文件的导入是为了对别人提供的接口的调用,文件的导出是为了对别人提供接口;在面向对象编程中,对象的非私有方法是对不同级别的对象的接口暴露。

   面向接口不象面向过程,面向对象那么直接明显,因为它是一种理念上的东西,高于面向过程,面向对象,又体现于这些编程方法中,这主要是有开发者自身去把握,是“无用”,又是“大用”。

  2 面向接口的实现

   具体的实现技巧我并不打算在这里涉及,因为不同的编程语言,不同的场合,其选择也不同,下面从通用层面上来讲,看看如何实现面向接口的编程。

   下面这个链接是我一个面向接口编程的概念图:

    http://dl2.csdn.net/down4/20070730/30084300437.jpg

    在这个模型当中,可以分为三横三纵:横向代表层次,纵向代表功能。从横向来看,分为接口层,逻辑层,资源层。接口层是你对外暴露的接口的集合,比如你的类中的一个个公共成员,接口层对业务逻辑层的封装,提供给外界使用业务逻辑层的能力;逻辑层,也就是对自身业务逻辑实现的功能集,逻辑层对资源层进行调用,在实现自身业务逻辑的同时,也完成了对资源层的屏蔽,也就是说,实现了对资源层的封装;资源层,内容比较广泛,可以是别人提供的组件,也可以是诸如ADO.NET,Jdbc这样的数据资源访问层,但说白了,资源层还是别人提供给你的一些接口。 从纵向来看,上一层中的功能点都是根据业务逻辑调用下一层的接口,同时为服务的对象提供接口。

     在这种模型下,除了通过横向的分层使得思路清晰,还因为通过纵向的组织,使得测试工作也可顺利进行。比如,我们把接口层中的一个个接口分别作为测试单元,那么,通过对每一个测试单元进行单元测试,则能很好的定位Bug所在。

     面向接口的编程,内涵丰富,本文探讨得不是深入,只是给了一个大概的概念,希望能起到抛砖引玉之效,和大家交流更多相关话题。