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

2020-04-09  本文已影响0人  凯玲之恋

基于接口而非实现编程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参考

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

上一篇 下一篇

猜你喜欢

热点阅读