从不同的apis获取数据

时间:2017-09-20 21:29:50

标签: api repository-pattern solid-principles

我正在开发从其他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所具有的方法。因此,我们的想法是从应用程序服务获取来自特定存储库的数据,并使用获得的信息创建实体。

我想知道我是否以正确的方式运用?

1 个答案:

答案 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。