设为首页 加入收藏

TOP

接口使用的最佳时机(三)
2023-09-09 10:25:23 】 浏览:130
Tags:时机
码的重复,促进了代码的复用,同时也提供了更好的可扩展性和可维护性。

4.3 模块间的交互

系统划分不同模块并使用接口来进行交互也是一个重要的场景。当将系统划分为不同的模块或组件时,使用接口定义模块之间的契约和互动方式是一种良好的实践。每个模块可以实现所需的接口,并与其他模块进行交互,这使得模块之间的界限更加清晰,易于理解和维护。

使用接口可以降低模块之间的耦合度。这意味着每个模块不需要关心其他模块的具体实现细节,只需要遵循接口定义的契约。这种模块化的设计方式有助于将复杂的系统拆分为更小、更易管理的部分,并降低了系统开发和维护的复杂性。

4.4 单元测试的使用

在需要解除一个庞大的外部系统的依赖时。有时候我们并不是需要多个选择,而是某个外部依赖过重,我们测试或其他场景可能会选择 mock 一个外部依赖,以便降低测试系统的依赖。

比如依赖多个外部rpc,单元测试时需要屏蔽外部的依赖,此时就比较有必要使用接口,通过框架生成一个mock的实现,从而解除对外部的依赖。

5. 潜在的误用和滥用

5.1 接口滥用带来的问题

虽然接口在合适的场景中非常有用,但滥用接口可能会导致代码变得复杂、难以理解和难以维护。引入过多的接口可能会增加系统的复杂性,使代码难以理解。每个接口都需要额外的抽象和实现,这可能不是必要的。其次使用接口有时会引入额外的性能开销,因为运行时需要进行接口解析。在性能敏感的应用中,这可能是一个问题。

最重要的一个问题,接口的目标是提供一种通用的抽象,给系统提供可配置项,但有时候过度一般化可能会导致不必要的复杂性。在某些情况下,直接使用具体的类可能更加简单和清晰。

我们应该在确保接口是必要的情况下使用它们,以避免不必要的复杂性和耦合。接口的设计应该基于真正的需求和系统架构,而不是仅仅为了使用接口而使用接口。

5.2 如何识别接口是否滥用

对于识别接口是否滥用,可以通过下面几个方面来检查,如果满足了下面的某一个条件,此时大概率就出现了接口滥用的情况。

是否过早的抽象,在引入该接口时,系统中是否足够的不同实现来正当地支持这些接口。如果没有的话,此时大概率过早接口的引入,增加了复杂性,而不带来真正的好处。

是否所有类之间引入接口,无论是否有必要,在这种情况下,接口的数量可能会急剧增加,导致代码难以理解和维护,可能还是存在一定滥用的情况。

如果接口经常发生变化,那么实现这些接口的类可能需要频繁地进行修改,这会增加维护的难度,此时要么接口是不必要的,要么接口的设计是不合理的,需要重新设计。

总的来说, 我们需要确保真正需要接口时才引入它们。应该谨慎考虑每个接口的设计,确保它们具有明确的用途(如隔绝变化,模块间交互的契约,方便单元测试),并且不引入不必要的复杂性。根据实际需求和系统架构来合理地使用接口,而不是为了使用接口而使用接口。

6. 总结

在本文,我们介绍了什么是接口,接口是一种契约,一种协议,用于模块间的交互。

在此基础上,通过一个例子来介绍接口的优点,了解到接口可以提高代码的可扩展性,可维护性,以及降低系统之间的耦合度。

但是接口也不是任何场景都可以随意使用的,我们会介绍接口使用的常见场景,包括隔绝系统的变化部分,以及一些类库设计时对外提供配置项的场景。

最后我们还介绍了接口滥用可能带来的问题,以及一些比较明显的特征,帮助我们更早识别出系统设计的坏味道。

基于此,完成了对接口的完整介绍,希望对你有所帮助。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go 语言内置类型全解析:从布尔到.. 下一篇go基础-函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目