2010-07-17 6 views
2

안녕하세요, 나는 데이터의 다른 세트 (데이터가 약간 다를 수 있습니다)에 비슷한 단계/동작 (약간 다릅니다)을 수행해야하는 문제가 있습니다. 필자가 수행해야하는 몇 가지 단계가 있습니다. 연결, 유효성 검사, 필요하다면 오류 메시지 작성, 데이터의 구조를 설정 형식으로 변경하고 결과를 출력합니다.템플릿 메서드 패턴을 사용하는 경우

필자는 템플릿 메서드 패턴을 보았습니다.이 메서드는 매우 잘 맞을 것입니다.이 사운드가 정확합니까? 아니면 이런 유형의 문제를 해결할 더 좋은 방법이 있습니까?

나는 시스템에 많은 영향을 미치지 않으면 서 새로운 데이터 세트를 시스템에 손쉽게 추가 할 수 있고 오류보고를 변경할 수있는 디자인을 목표로하고있다.

저는 PHP를 사용하고 있습니다.

답변

1

전략 방법은 템플릿 방법 잘 작동을 고려하십시오.

템플릿 메서드는 클래스 요구 사항을 지정합니다. 전략 방법을 사용하면 객체를 사용하여 동작을 정의하고 종속성 주입을 사용하여 런타임에 정의 할 수 있습니다.

class CRUDTemplate 
{ 
    protected $updater; 
    protected $creator; 
    protected $deletor; 
    protected $loader; 

    public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader) 
    { 
      $this->updater = $updater; 
      //...snipped... 
    } 

    // sample template function; others are create, delete, update 
    public function load($id) 
    { 
      $this->content = $this->loader->load($id); 
    } 
} 

샘플 코드는 바로 전략의 각 호출 템플릿 기능을 보여줍니다 동안

는, 더는 입력 initisation 등의 검증으로 템플릿 기능의 전문 오버로드 된 버전에서 수행 할 수 있습니다. 결국 무엇인가 전략을 호출해야합니다.

위 예제에서 서로 다른 조건에 대해 서로 다른 전략을 사용할 수 있습니다 (CRUD가 여기서는 가장 좋은 예가 아닐 수도 있습니다). 따라서 데이터가 출력되는 방식을 변경하고 저장/생성 /로드 방식을 유지하려면 출력 전략을 변경하기 만하면됩니다.

당신이 전달하는 전략이 올바른지 확인하기위한 유형 검사가 없으므로 전략이 올바른 상황에 맞는지 확인해야한다는 단점이 있습니다 (기대되는 기본 클래스). 오 그래, CRUDTemplate도 기본 클래스에서 파생 될 수 있습니다.

PHP의 경우 배열이 복잡한 매개 변수를 전달하는 데 가장 적합하다는 것을 알았습니다. 물론 배열의 유효성 검사를 수행해야합니다.

관련 문제