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();
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();
return $video; } static public function createFromPost( Post $post ) { // } static public function createFromEpisode( Episode $episode ) { // } }
$news = NewsStorage::find(1); $video = Video::createFromNews($news); Самому мне кажется второй вариант более правильный, в силу того, что логика всех способов создания Video инкапсулирована в самом классе, с другой стороны первый вариант представляется более понятным с точки зрения человеческой логики.
Оба варианта имеют свои преимущества и недостатки, и выбор зависит от конкретной ситуации и предпочтений разработчика.
Второй вариант, где создание объекта Video инкапсулировано в самом классе Video, может быть более удобным и легким для понимания кода, особенно если у вас есть несколько методов создания объекта Video из разных типов объектов. Это также может упростить изменения в логике создания объекта Video, так как все изменения будут внесены в одном месте.
Однако, первый вариант с методом createVideo в каждом классе, который создает объект Video из объекта своего типа, может быть удобным в ситуации, когда у вас очень много различных логик создания объекта Video для разных типов объектов. Это позволяет легко добавлять новые методы создания в каждом классе без изменения логики в классе Video.
Итак, выбор между двумя вариантами зависит от вашего стиля программирования, специфики вашего проекта и предпочтений. Вы можете выбрать тот вариант, который кажется вам более удобным и понятным для вас и ваших коллег.
Оба варианта имеют свои преимущества и недостатки, и выбор зависит от конкретной ситуации и предпочтений разработчика.
Второй вариант, где создание объекта Video инкапсулировано в самом классе Video, может быть более удобным и легким для понимания кода, особенно если у вас есть несколько методов создания объекта Video из разных типов объектов. Это также может упростить изменения в логике создания объекта Video, так как все изменения будут внесены в одном месте.
Однако, первый вариант с методом createVideo в каждом классе, который создает объект Video из объекта своего типа, может быть удобным в ситуации, когда у вас очень много различных логик создания объекта Video для разных типов объектов. Это позволяет легко добавлять новые методы создания в каждом классе без изменения логики в классе Video.
Итак, выбор между двумя вариантами зависит от вашего стиля программирования, специфики вашего проекта и предпочтений. Вы можете выбрать тот вариант, который кажется вам более удобным и понятным для вас и ваших коллег.