2017-07-17 40 views
0

我一直在大量阅读与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(); 
    } 

} 
+1

“有效”---这究竟意味着什么? – zerkms

+0

@zerkms我认为存储库模式的重点是通过抽象操作数据而不触及模型。使用界面可以实现这一点。但我想知道这个的原因。 – Shawn31313

回答

0

简短的回答:不是,你必须使用一个接口。接口只是确保您在实现接口的每个类中正确使用相同的方法。

例如,如果您使用findOne(id)方法。你知道它会一直收到一个id,你可以指定它的类型以及返回的内容。

在大型应用程序中,它可能非常有用并维护订单。

如果您不确定,根据我的经验,最好尝试几种不同的方法来查看哪一种适合您的需求。除非你没有时间,否则应该简单地使用更常见的东西。

我使用了界面,并且我认为一旦有新开发人员进入并更好地理解允许所有存储库的内容,它就可以很好地工作。

相关问题