由面向接口思想一想到的“泛接口(非泛型接口)”思想

面向接口思想

  自从咱们开始接触面向对象编程,随着不断的学习,都会逐渐了解接口的含义,面向接口编程强调“定义”与“实现”的分离,我认为其本质就是“解耦两个对象的依赖关系”,最常听别人提及的想必就是“依赖倒置原则”的那两句经典的话:  算法

  • 高层模块不该该依赖于底层模块,二者都应该依赖于抽象
  • 抽象不依赖于细节,细节依赖于抽象

  不知道大家什么感觉,反正只要提到接口这两句话我是常常听。虽然简短两句话,但都是实践总结出来的,是软件设计必须遵照的原则之一,不然一旦需求变化你的系统可能就要面临大规模重写,若要碰上不断变化的需求,恐怕你就要崩溃了。关于面向接口的详细知识,本身百度之,此处就再也不赘述。 数据库

"泛接口"思想

  话说前段时间某公司一直在说泛安全,说不能仅把安全局限于杀毒软件方面,要推广到整个行业。我以为这个概念挺有想法的,突破传统安全升华到了更高的层次。那么什么是“泛接口”呢,我认为它不一样于通常意义上的接口偏重于具体实现,而是上升到设计层面的一种思想,与通常接口的本质相同,“泛接口”的核心是“解耦”或者“自由互通”,体如今代码实现层面就好比各类设计模式、Spring等,解耦对象之间的依赖关系,不然会严重下降系统的维护性与扩展性;体如今数据库层面就好比用中间表(或者叫映射表)来解耦表与表的多对多关系,不然表信息与表关系严重糅合在一块儿,形成大量数据冗余;体如今ORM上就好比用配置文件来解耦对象与数据库表的对应关系(也能够用注解的方式)。还有MVC中URL与Action之间的路由机制,等等等等,相似这样的应用场景还有不少就不一一举例了,咱们发现,以上场景中涉及到的两个“对象”之间是互不依赖的,由于都采用了某种手段将一方灵活的转换为另外一方,正由于这种“解耦”或者“自由互通”的在各个地方都有使用,所以将其进行抽象,就得出了“泛接口”思想。说到这里恐怕你仍是云里雾里,尼玛它究竟是什么啊,好吧,上图(这张图不必定合理,本身瞎画的,各位就凑合着看吧,哈哈):编程

  总之,“泛接口”比如一个方法论,或者指导思想,当面临互相依赖的两个“对象”的时候经过某种手段进行互相解耦或连通,这里的“对象”不只仅是类,还能够是模块或其余任何事物。在具体应用中,“泛接口”要结合具体业务场景落地为具体实现手段,以达到两个“对象”的自由互通。拿上面那些例子来讲,“路由机制”实现了URL对象与Action对象的互通;“配置文件+相应算法”实现了类对象与表对象的互通,等等,这里“路由机制”和“配置文件+相应算法”就是“泛接口”思想落地后的具体方法。也许你会以为这种“具体处理方法”才是最重要的,它才是实现对象互通的关键,对于具体业务场景来讲的确如此,可是这种“具体方法”老是局限在必定范围内的,当你将其抽象到必定高度以后,你会发现这种思想也许能够不只仅应用在软件开发方面,放到生活、社会甚至政治中都是能够的,就比如大陆和台湾不也在相应政策框架下实现了互通吗。设计模式

  “泛接口”的实际意义,其实它只是一种解决问题的抽象思想,就犹如哲学中的方法论,你学习了方法论就必定能在面对问题时将其转换为具体处理方法吗,真不必定,还要在实践中多锻炼本身,经过经历使本身真正领悟其精华才能更好的来指导本身作事。缓存

“泛接口”思想的一个具体应用

  下面拿一个具体应用来讲明“泛接口”的落地过程,既然“泛接口”要解耦,就要弄清楚哪里有耦合,针对具体问题具体处理,在这个应用模块中,咱们要将多种文件的元数据格式进行相互转换,面临的问题主要是源格式与目标格式复杂的复杂对应关系,以下图左所示,为了解耦引入中间格式,使各类格式都依赖于中间格式,下降繁多的对应关系,以下图右因此:安全

                             

 

  经过这种方式能够将N方级别下降到N的线性级别,但此时耦合依然存在,源与目标都依赖于中间格式,因为特殊需求须要将中间格式存放在数据库中,那么一旦遇到表信息的更改或者数据库迁移问题,整个模块就没法运行了,必须从新修改。为了解除这种依赖,咱们引入映射关系,经过映射文件描述各类格式和中间格式的映射关系,而后实现每种格式的转换算法,经过调用“映射处理模块”获取不一样格式与中间格式的元数据对应关系,传入具体算法中进行格式转换处理。这样的话,前面的那种依赖关系被彻底转移到了“映射文件”中,若是添加新的格式,只须要在映射文件中添加相应的映射关系,并编写该格式对应的转换算法,彻底不影响之前的代码。具体应用时还能够将映射关系加载到缓存中,下降IO操做,提升程序的灵活性与扩展性。这样就造成了一个通用的格式转换模块,总体结构图以下所示: 框架

  上图这种作法能够自由的将不一样格式进行互相转换,图片的上半部分至关于“泛接口”思想落地后的具体策略,源格式经过该策略转换为目标格式。该策略思想还能够应用于数据迁移中,只不过可能要设置复杂的映射关系来描述各个对象。学习

总结

  "泛接口"是从多个应用中抽象出来的一种“解耦或互通”思想,在遇到具体问题时还需具体分析,而后落地为具体方法。因此最重要的仍是须要咱们在实践中不断锻炼,经过本身的努力将抽象理论转换为具体方法,而后运用到实际应用中。经过反复的理论指导与实践求证,将领悟到的东西转换为本身的思想。spa

相关文章
相关标签/搜索