2017-09-20 5 views
0

다른 api (facebook, google ...)에서 데이터를 가져 오는 API를 개발 중입니다. 내 생각은 모든 API에 대해 서로 다른 저장소를 만드는 것입니다. exampl의 경우 :다른 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

여기에서 수행하려는 계획은 지금까지 강건한 원칙을 잘 적용한 것입니다. 나중에 올 수있는 것에 대해주의하십시오.

코드의 다른 부분에서 코드가 구현에 독립적인지 확인하십시오. 예를 들어, 컨트롤러에서 일부 데이터를 가져 오는 경우 :

<?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"코드를 수정하지 않고도 TwitterReaderRepository로 FacebookReaderRepository를 쉽게 바꿀 수 있다는 것입니다. getRepository() 메소드의 내용 만 수정하십시오.

"Interface segregation principle"에주의해야 할 수도 있습니다 : FacebookReaderRepository가 너무 커지면 HTTP 호출 만 처리하고 FacebookReader에서 사용하는 FacebookApiClient를 생성하려는 경우가 있습니다. , 그리고 이것은 ReaderRepositoryInterface를 구현할 것입니다.

관련 문제