2017-09-20 15 views
0

私は他のapis(facebook、google ...)からデータを取得するapiを開発しています。私の考えは、すべてのAPIに対して異なるリポジトリを作成することです。 examplについて:別のapisからデータを取得

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が適用されています。 このアプローチのメリットは、「Some stuff」コードを修正することなく、FacebookReaderRepositoryをTwitterReaderRepositoryで簡単に置き換えることができることです。 getRepository()メソッドのコンテンツのみを変更してください。

"Interface segregation principle"にも注意してください。あなたのFacebookReaderRepositoryが大きすぎる場合は、FacebookReaderRepositoryがHTTP呼び出しのみを処理するFacebookApiClientを作成したい場合があります。これはReaderRepositoryInterfaceを実装します。

関連する問題