我一直在阅读使用laravel的存储库模式,我已经看到DI已经完成了存储库本身以及它的接口。
我的问题是,存储库是否需要接口才能生效?
class Repository {
public function foo () {
return "Hi";
}
}
class RepositoryController {
private $test;
public function __contruct(Repository $test) {
$this->test = $test;
}
public function do() {
echo $test->foo();
}
}
VS
interface RepositoryInterface {
function foo (string $text)
}
class Repository implements RepositoryInterface {
public function foo ($text) {
return $text;
}
}
class RepositoryController {
private $test;
public function __contruct(RepositoryInterface $test) {
$this->test = $test;
}
public function do() {
echo $test->foo();
}
}
答案 0 :(得分:0)
简答:不。您不必使用界面。界面只是确保您在实现接口的每个类中正确使用相同的方法。
例如,如果您使用findOne(id)方法。你知道它总会收到一个id,你可以指定它的类型以及返回的内容。
在大型应用程序中,它可以非常有用并保持秩序。
如果您不确定,根据我的经验,最好尝试一些不同的方法来确定哪一种适合您的需求。除非你没有时间,否则应该只使用更常见的东西。
我使用了界面,我认为一旦有新的开发人员进入并且更好地了解所有存储库的允许情况,它的效果都很好。