为了账号安全,请及时绑定邮箱和手机立即绑定

我应该将所有公共功能添加到接口吗?

我应该将所有公共功能添加到接口吗?

PHP
隔江千里 2021-09-05 18:06:25
我发现有些项目所有的公共方法都没有在接口中声明,而接口只使用一次。像这样的类和接口。transform方法未在接口中声明。AFAIK 我们使用接口来允许计算机在对象(类)上强制执行某些属性。那么当该接口只有一个实现时,我们是否应该在该接口中添加所有公共方法?
查看完整描述

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。这称为接口隔离。


因此,不,接口不一定表示实现它的类的每个方法。


查看完整回答
反对 回复 2021-09-05
?
呼如林

TA贡献1798条经验 获得超3个赞

您不需要所有类的接口,但许多人认为将接口放在应用程序的不同层之间或应用程序的不同逻辑块之间是个好主意。

因此,例如,如果您的应用程序访问一个数据库,最好在数据库和应用程序的其余部分之间放置一个接口,这样您就可以轻松地使用另一个数据库而无需更改应用程序的其余部分。

您的应用程序中的示例是一个存储库,有一个模式:

存储库

使用类似集合的接口访问域对象,在域和数据映射层之间进行调解。

如果您在不同的目录中有不同的源代码逻辑块,在它们之间放置接口也是一个好主意,您可能会决定将一个部分放在不同的服务器上。有一个很好的工具来定义边界并检查你没有打破它们:deptrac

定义规则并运行 deptrac 后,它将创建如下图像:

//img1.sycdn.imooc.com//613496c30001689301870252.jpg

查看完整回答
反对 回复 2021-09-05
  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信