接口隔离原则背后的原因是什么?

接口隔离原则(ISP)表示,许多客户端特定的接口比一个通用接口更好。为什么这很重要?


答案 1

ISP指出:

不应强制客户端依赖于它们不使用的方法。

ISP涉及重要的特性 - 内聚力耦合
理想情况下,您的组件必须经过高度定制。它提高了代码的健壮性和可维护性。

实施ISP可为您提供以下奖励:

  • 内聚力 - 更好的可理解性,稳健性
  • 耦合 - 更好的可维护性,高抗变化性

如果你想了解更多关于软件设计原则的信息,请获取一本敏捷软件开发、原则、模式和实践手册。


答案 2

接口隔离是SOLID原则上的“I”,在用第一个太深之前,让我们解释一下后者是什么意思。

SOLID 可以被视为一组由专家提出的最佳实践和建议(这意味着它们之前已经过验证),以便为我们如何设计应用程序提供可靠的基础。这些实践致力于使我们的应用程序更易于维护、扩展、调整和扩展。

我为什么要关心 SOLID 编程?

首先,你必须意识到你不会永远在你所在的地方。如果我们使用标准和众所周知的架构,我们可以确定我们的代码将很容易被我们之后的其他开发人员维护,我相信你不会想处理修复没有应用任何已知方法的代码的任务,因为它很难理解它。

接口隔离原理。

知道我们知道SOLID原则是什么,我们可以更详细地了解接口隔离原理,但是接口隔离究竟说明了什么?

“客户不应该被迫实施他们不会使用的不必要的方法”

这意味着有时我们倾向于使用很多方法制作接口,这在一定程度上可能是好的,但是这很容易被滥用,我们最终可能会得到实现空或无用方法的类,这当然会给我们的应用程序增加额外的代码和负担。想象一下,你在单个界面中声明了很多方法,如果你喜欢可视化辅助工具,一个正在实现一个接口但确实需要几个方法的类,它看起来像这样:

enter image description here

另一方面,如果您正确应用接口隔离并将接口拆分为较小的子集,则可以确保实现仅需要的子集:

enter image description here

看!更好!执行此原则将允许您具有低耦合,这有助于更好的可维护性和高抗更改性。因此,您可以真正利用接口的使用,并在真正应该实现的方法。现在让我们回顾一个不那么抽象的例子,假设你声明了一个名为Reportable的接口。

public interface Reportable {

        void printPDF();
        void printWord();
        void printExcel();
        void printPPT();
        void printHTML();


}

并且您有一个客户端,它将仅以Excel格式导出一些数据,您可以实现该接口,但是您是否只需要实现Excel方法?答案是否定的,即使您不打算使用它们,您也必须为所有方法的实现编写代码,这可能会导致大量垃圾代码,从而使代码难以维护。

记住保持简单,不要重复自己,你会发现你已经在不知情的情况下使用了这个原则。