在yii2中创建工厂类的最佳实践是什么?

时间:2016-06-22 21:06:34

标签: yii2 factory

基本上,我想创建一个工厂类,它将使用几个不同的模型。我不知道如何在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 个答案:

答案 0 :(得分:1)

我会避免在模型中抛出Http异常,在控制器中使用它们。例如,您可以抛出InvalidConfigurationException,因为您需要拥有$ 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');
...

这些对象可能具有相同的属性,但实现方式不同。例如,大师们可以参加两个获胜的比赛,3个大奖赛......等等......