面向对象(六)--基于接口而非实现编程

基于接口而非实现编程

1、如何解读原则中的“接口”二字?

从本质上来看,“接口”就是一组“协议”或者“约定”,是功能提供者提供给使用者的一个“功能列表”。

“接口”在不同的应用场景下会有不同的解读,比如服务端与客户端之间的“接口”,类库提供的“接口”,甚至是一组通信的协议都可以叫作“接口”。

刚刚对“接口”的理解,都比较偏上层、偏抽象,与实际的写代码离得有点远。

如果落实到具体的编码,“基于接口而非实现编程”这条原则中的“接口”,可以理解为编程语言中的接口或者抽象类

应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。

最大的挑战之一就是需求的不断变化,这也是考验代码设计好坏的一个标准。

越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。

抽象就是提高代码扩展性、灵活性、可维护性最有效的手段之一。

2、如何将这条原则应用到实战中?

在编写代码的时候,要遵从“基于接口而非实现编程”的原则,具体来讲,我们需要做到下面这 3 点

  • 1、函数的命名不能暴露任何实现细节。
  • 2、封装具体的实现细节
  • 3、为实现类定义抽象的接口。具体的实现类都依赖统一的接口定义,遵从一致的上传功能协议。

很多人在定义接口的时候,希望通过实现类来反推接口的定义。

接口的定义只表明做什么,而不是怎么做。

接口设计是否足够通用,是否能够做到在替换具体的接口实现的时候,不需要任何接口定义的改动。

3、是否需要为每个类定义接口?

做任何事情都要讲求一个“度”,过度使用这条原则,非得给每个类都定义接口,接口满天飞,也会导致不必要的开发负担。

这条原则的设计初衷是,将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。

如果在我们的业务场景中,某个功能只有一种实现方式,未来也不可能被其他实现方式替换,那我们就没有必要为其设计接口,也没有必要基于接口编程,直接使用实现类就可以了

越是不稳定的系统,我们越是要在代码的扩展性、维护性上下功夫。相反,如果某个系统特别稳定,在开发完之后,基本上不需要做维护,那我们就没有必要为其扩展性,投入不必要的开发时间。

参考

09 | 理论六:为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面向对象编程和面向对象编程语言 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装...
    JBryan阅读 3,355评论 0 0
  • 单一职责原则 (SRP) 全称 SRP , Single Responsibility Principle 单一职...
    米莉_L阅读 5,718评论 2 5
  • 前言 关于设计模式六大设计原则的资料网上很多,但感觉很多地方解释地都太过于笼统化,特此再总结一波。 优化第一步-单...
    ghroost阅读 4,814评论 0 5
  • 推荐深度好文:原文链接,作者:张洋 序言 Perface “佛曰:苦海无涯,回头是岸。——佛教用语” 面向对象(O...
    不知公民阅读 4,149评论 0 4
  • 在你的记忆里,那个常常跟你互道晚安的人是谁? 你们最后怎么样了,是变成了跟你最亲的人还是于茫茫人海中两别? 缘分这...
    荼茵阅读 838评论 0 2