2009-06-16 10 views
1

사용하여 콘크리트 신청서Zend_Form와 OOP 디자인 패턴

1을 만들 Zend_Form를 사용하여 올바른 방법) "연장"과 파생 클래스

class MyForm extends Zend_Form { 

public function __construct() { 
    $el = $this->createElement('text', 'el'); 
    $this->addElement($el); 
    // ... 
} 

} 

2) 또는 대표/프록시 패턴

를 사용은 무엇입니까
class MyForm { 

private $_form; 

public function __construct() { 
    $this->_form = new Zend_Form(); 
    $el = $this->createElement('text', 'el'); 
    $this->_form->addElement($el); 
    // ... 
} 

public function __call($I_method, $I_params) { 
    // ... forwarding calls to private delegate 
} 

} 
+0

2) 프록시가 아닌 이유 – dfa

+0

프록시가 아닌 이유는 무엇입니까? 실제 주제가 숨겨진 개인 회원이며, MyForm에서 메시지를 받으면 전체 확장 클래스 구현이 아닐 수도 있지만 기본 아이디어를 보여 주려고 시도합니다. – duganets

답변

1

this example에 따라 양식 클래스를 만들고 도우미를 사용하여 인스턴스화합니다. 영감은 Matthew Weier O'Phinney, ZF 프로젝트 리더의 도움으로 이루어 졌으므로 좋은 사례로 받아 들여서 기쁩니다. 나는 기본 장식과 물건과 콘크리트 impelemntation을 설정하는 데 사용됩니다

My_Form extends Zend_Form 

다음

My_Form_ConcreteImplementation extends My_Form 

My_Form 클래스를 사용하고

+0

예를 들어, 나 또한이 접근법을 양식에 사용하지만 가끔 좋지 않을 수도 있다고 생각합니다. 방법. LISP 원칙에 따르면 : 1) 하위 클래스에서 전제 조건을 강화할 수 없습니다. 2) 하위 클래스에서 사후 조건을 약화시킬 수 없습니다. Subclass에서 메소드를 오버라이드 할 때, 우리는 그것의 행동을 변경하고 condictions를 사용한다고 생각합니다. – duganets

+0

나는 학자보다 실용적인 사람이고, LSP를 이해하는 동안, 미묘한 차이만으로는 저를 걱정하기에 충분하지 않습니다. 폼은 여전히 ​​Zend_Form처럼 작동하지만 몇 가지 요소가 있습니다. –

0

요소를 추가하고 필요한 경우 사업을 처리합니다. 그것은 건조하게 만들고 그것이 필요한 것입니다. 학술적 원칙까지 유지할 ​​필요가 없습니다. P

+0

정확하게 이해하면 MyForm - 응용 프로그램의 모든 양식에 대한 중간 계층, 예를 들어 1), thx를 선택했습니다. – duganets