2016-06-22 4 views
2

그래서 기본적으로 몇 가지 모델을 사용할 팩토리 클래스를 구현하려고합니다. 나는 yii2 안에서 어떻게해야하는지에 대한 단서가 없다. 어떤 도움이라도 좋을 것입니다.yii2에서 팩토리 클래스를 만드는 가장 좋은 방법은 무엇입니까?

다음은 내가하려는 일에 대한 일반적인 아이디어입니다. app \ models \ Event를 사용하십시오. app \ models \ EventParticipant를 사용하십시오. app \ models \ Match를 사용하십시오.

/** 
* @property Event $Event 
* @property EventParticipant $EventParticipant 
* @property Match $Match 
*/ 
abstract class Tournament 
{ 
    protected $_id; 
    protected $_event; 
    protected $_type; 

    final public function __construct($event) { 
     $this->Event = new Event(); 
     $this->EventParticipant = new EventParticipant(); 
     $this->Match = new Match(); 

     if(!$event) { 
      throw new \yii\web\HttpException(400, 'Invalid Event', 405); 
     } 

     $this->_id = $event['Event']['id']; 
    } 
} 

}

답변

1

나는 모델에서 HTTP를 예외를 던지는 피할 것이다 컨트롤러에서 사용. 예를 들어 InvalidConfigurationException을 throw 할 수 있습니다. $ event가 있어야 할 필요는 없습니다.

공장 디자인 패턴의 많은 구현이 있습니다, 여기에 간단한

class TournamentFactory 
{ 
    public static function create(Event $event, EventParticipant $eventParticipant, Match $match) { 
     return new Tournament($event, $eventParticipant, $match); 
    } 
} 

하지만 나는이 예에서는 소용이 표시되지 않습니다. 나는 주로 당신의 예에서, 객체 유형이 같은 사이를 전환하는 데 사용할 :

$grandSlam = TournamentFacory::create('grandSlam'); 
$grandSlam->setEvent($event); 
$grandSlam->setParticipants($participants); 
... 
$masters = TournamentFacory::create('masters'); 
... 

이러한 개체는 공통으로 동일한 속성,하지만 다른 구현이있을 수 있습니다. 예를 들면 주인은 2 개의이기는 세트, 3에 그랜드 슬램을한다 ... etc. ...

+0

공장을위한 정당한 이유는 단 하나 제거, 두 배 제거, 둥근 로빈, 스위스, 등등이다. – user1620152