2 回答
TA贡献1900条经验 获得超5个赞
这取决于您的界面所表达的内容。接口和类之间不需要 1:1 的相关性,否则接口和类的区别在很大程度上将毫无意义。
您抽象地定义接口来描述对象需要满足的期望。例如:
interface Foo {
public function bar();
}
function baz(Foo $foo) {
$foo->bar();
}
这描述了一个函数baz,它需要一个$foo实现至少一个方法的参数bar()。要满足此要求,您需要有一个implements Foo. 该类还可以实现其他接口或实现更多的方法。
class ConcreteFoo implements Foo, Bar, Baz, Countable, ArrayAccess {
public function bar() { ... }
public function ham() { ... }
...
}
interface Foo除了许多其他的东西之外,这个类还满足了 的期望。那不需要关心interface Foo也没有function baz。这称为接口隔离。
因此,不,接口不一定表示实现它的类的每个方法。
TA贡献1798条经验 获得超3个赞
您不需要所有类的接口,但许多人认为将接口放在应用程序的不同层之间或应用程序的不同逻辑块之间是个好主意。
因此,例如,如果您的应用程序访问一个数据库,最好在数据库和应用程序的其余部分之间放置一个接口,这样您就可以轻松地使用另一个数据库而无需更改应用程序的其余部分。
您的应用程序中的示例是一个存储库,有一个模式:
存储库
使用类似集合的接口访问域对象,在域和数据映射层之间进行调解。
如果您在不同的目录中有不同的源代码逻辑块,在它们之间放置接口也是一个好主意,您可能会决定将一个部分放在不同的服务器上。有一个很好的工具来定义边界并检查你没有打破它们:deptrac
定义规则并运行 deptrac 后,它将创建如下图像:
- 2 回答
- 0 关注
- 177 浏览
添加回答
举报