PHP: Один объект может создаваться из многих других, где правильнее размещать фабрики ? Начальная диспозиция: есть объекты типа Video, которые могут создаваться и инициализироваться с какой-то логикой объектами других типов News, Post, Episode - эти объекты не родственные между собой. Вопрос, как правильнее распределить фабрики между классами ?Вариант 1:Class News {
public function createVideo() {
$video = new Video;
$video->title = $this->title;
$video->picture_id = $this->picture_id;
$video->save();

$link = new News_Video;
$link->news_id = $this->id;
$link->video_id = $video->id;
$link->save();

return $video;
}
}

Class Post {
public function createVideo() {
//
}
}
Class Episode {
public function createVideo() {
//
}
}
$news = NewsStorage::find(1);
$video = $news->createVideo();Вариант 2Class Video {
static public function createFromNews( News $news ) {
$video = new self;
$video->title = $news->title;
$video->picture_id = $news->picture_id;
$video->save();

$link = new News_Video;
$link->news_id = $news->id;
$link->video_id = $news->id;
$link->save();

return $video;
}
static public function createFromPost( Post $post ) {
//
}
static public function createFromEpisode( Episode $episode ) {
//
}
}

$news = NewsStorage::find(1);
$video = Video::createFromNews($news);
Самому мне кажется второй вариант более правильный, в силу того, что логика всех способов создания Video инкапсулирована в самом классе, с другой стороны первый вариант представляется более понятным с точки зрения человеческой логики.

21 Авг 2019 в 07:09
190 +1
0
Ответы
1

Оба варианта имеют свои преимущества и недостатки, и выбор зависит от конкретной ситуации и предпочтений разработчика.

Второй вариант, где создание объекта Video инкапсулировано в самом классе Video, может быть более удобным и легким для понимания кода, особенно если у вас есть несколько методов создания объекта Video из разных типов объектов. Это также может упростить изменения в логике создания объекта Video, так как все изменения будут внесены в одном месте.

Однако, первый вариант с методом createVideo в каждом классе, который создает объект Video из объекта своего типа, может быть удобным в ситуации, когда у вас очень много различных логик создания объекта Video для разных типов объектов. Это позволяет легко добавлять новые методы создания в каждом классе без изменения логики в классе Video.

Итак, выбор между двумя вариантами зависит от вашего стиля программирования, специфики вашего проекта и предпочтений. Вы можете выбрать тот вариант, который кажется вам более удобным и понятным для вас и ваших коллег.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир