2014-03-05 2 views
-1

내가 약 10 웹 서비스 호출을 호출하고 난 하나의 프록시를해야합니다 내가가장 좋은 방법은

class WebserviceCalls { 
    public static function getReportDetails($reportId) {} 
    public static function getUserSession($userId) {} 
    .................................... 
} 

그런 다음 같은 클래스에있는 모든 전화를 넣어 한 단일 정적 클래스를 만든 WebServiceCallProxy은 실제 호출이 WebServiceCalls 클래스로 전달되기 전에 모든 캐싱을 처리합니다.

이 디자인에서는 새로운 웹 서비스 호출이 필요한 새로운 요구 사항이 생겼으므로 새 호출을 WebServiceCalls 클래스에 추가하기 만하면됩니다.

모든 디자인으로, 그리고 그것이 커짐에 따라, 코드 냄새를 요구하고, 모든 OOP 솔리드 원칙을 위반하며, 클래스도 응집력이 없습니다. 더 좋은 방법이 있어야한다는 것을 알고 있습니다. 미리 정의 된 디자인 패턴을 사용하여 이러한 종류의 문제를 처리하거나 간단한 객체의 각 메소드를 분해하고 전체 WebServiceClass를 다른 컴포넌트로 처리 할 수 ​​있습니다.

답변

-1

MVC 아키텍처 또는 비슷한 것을 사용하는 경우 WebServiveCalls을 분할하고 모델 레이어에 메서드를 배치하는 것이 좋습니다.

클래스에 getDetails() 함수를 넣고 User 클래스에 getSession() 클래스를 넣습니다.

해당 기능을 사용하여 네ESesary 데이터를 검색하는 데 필요한 요청 매개 변수를 준비합니다. 그런 다음 답변을 반환하는 WebService 클래스의 request 함수를 호출하십시오.

방법 내에서 응답을 처리하십시오.

새 전화를 추가해야하는 경우 쉽게 새 모델을 추가하거나 기존 모델을 확장 할 수 있습니다. WebService 클래스를 수정할 필요가 없습니다.

+0

의미가 있지만 사용자 모델이 이미 있고 getSession을 데이터 소스 (속성 또는 인수)로 웹 서비스로 추가하는 반면 사용자 모델의 다른 메서드에 대한 데이터 소스는 데이터베이스라고하면 어떻게 구성할까요? ? –

+0

'WebService'와'Database'를 서비스로 처리하십시오. 응용 프로그램 수명주기에 한 번만 존재해야합니다. 싱글 톤 패턴을 사용하여 인스턴스를 만들 수 있습니다. 'WebService :: getInstance() -> request (params)'를 호출하고 DB 쿼리를 위해'Database :: getInstance() -> query (query)'를 사용하는'User' 모델'getSession'에서 서비스 인스턴스를 가져 오는 'ServiceManager'. –

+0

MVC에는 "모델"이 없습니다. 모델은 계층입니다. 당신이 이해하지 못하는 사람의 패턴을 제안하는 것을 중단하십시오. 또한, 이것은 OP의 문제로 어떤 식 으로든 도움이되지 않습니다. 그리고 위에 벚꽃처럼 : ** 싱글렛은 반 패턴입니다 ** ** –