输入提示类或接口?

时间:2014-07-19 11:02:48

标签: class oop interface dependency-injection type-hinting

键入提示类或键入提示接口是否更好?

如果我输入提示一个类,我基本上可以传递每个具有完全相同名称的类,但是可能没有使用相同的方法,我注入它的类需要正常工作。

使用接口时,只要已实现类型提示接口,我就可以传入任何类(任何名称)。

类型提示类和接口的实际优缺点是什么?

1 个答案:

答案 0 :(得分:3)

接口定义了一个通用词汇表,没有任何实现细节。这样,您可以在代码中使用您知道存在的方法,而不必担心它是如何实现的。它基本上是一种承诺。接口的优点是,当您以后遇到类似的需求时,您不必破解某些类来支持不同的目的,或者使用一些笨拙的继承来覆盖所有内容 - 您可以通过另一个实现相同的类接口

换句话说:接受接口的代码基本上只是说"我知道这种方法存在,我知道我可以使用它。除此之外的任何事情都不是我的担心。"它传递给你的数据如何处理,你不必关心。

请考虑以下示例:您有一个脚本从数据库中提取内容并将其返回到实现接口IDataHandler的对象(缺少一个好名字)。在通常情况下,您有一个实现接口的类,它将在数据周围添加一些HTML,然后将其显示给用户。

但有时候您可能不希望向用户显示内容,而是希望将其保存到文件中。它需要的是另一个实现IDataHandler方法的类,您可以将它传递给处理数据库的代码。你看到了优势?您有另一个具有相同词汇表的类,并且您的数据库处理部分不必更改一位。

界面很棒,但当然,解决方案并不是随处可见。如果你有两个紧密耦合的类,并且你没有看到任何变化的空间,那么如果你出于显而易见的原因总是传递相同类型的类,那么使用接口是没有意义的。

接口的另一个优点是它有助于协作:接口定义了对象如何相互通信。如果您正在编写一些数据库处理程序类,而您的朋友正在编写一个负责显示数据的类,您可以在开始时定义一个接口,这样您就知道可以为您的朋友类使用哪些方法。这也允许其他人根据他们的需要定义一个类并将其传递给您的代码。

拥有多个具有相同名称的类是没有意义的,所以我不会为这种情况而烦恼。

相关问题