我正在开发从其他api(facebook,google ...)获取数据的api。我的想法是为每个api创建不同的存储库。例如:
Interface ReaderRepositoryInterface
{
getEvents ();
getComents ()
}
class FacebookReaderRepository implements ReaderRepositoryInterface
{
getEvents()
{
//call the api facebook method
}
getComments()
{
//call the api facebook method
}
}
GoogleReaderRepository ...
每个类(FacebookReaderRepository,GoogleReaderRepository ......)都将在基础架构中实现ReaderRepositoryInterface所具有的方法。因此,我们的想法是从应用程序服务获取来自特定存储库的数据,并使用获得的信息创建实体。
我想知道我是否以正确的方式运用?
答案 0 :(得分:0)
您打算在这里做的是迄今为止SOLID原则的良好应用。 稍后会发生什么,请注意:
请确保在代码的其他部分中,您的代码应保持与实现无关。例如,如果您在控制器中获取某些数据:
<?php
// doing some stuff - begins
$repository = $this->getRepository();
$events = $repository->getEvents();
// doing some stuff - continues
/**
* @return ReaderRepositoryInterface
*/
private function getRepository()
{
$repository = new FacebookReaderRepository();
return $repository;
}
这里的想法是,在“做一些事情”中,你的代码必须意识到他被赋予了ReaderRepositoryInterface并且只使用它附带的函数。他一定不知道$repository
实际上是FacebookReaderRepository。这是SOLID应用的。
这种方法的好处是你可以轻松地用TwitterReaderRepository替换FacebookReaderRepository,而无需修改你的“做一些东西”代码。只修改getRepository()
方法的内容。
你可能也会注意“接口隔离原则”:如果你的FacebookReaderRepository太大,也许你可能想创建一个只处理HTTP调用的FacebookApiClient,FacebookReader通过对获取的数据执行一些处理来使用它,这个将实现ReaderRepositoryInterface。