Как правильнее делать CRUD?
Раньше я всегда совмещал создание и редактирование модели в одном методе, примерно так:
public function actionSave($id = null) {
$model = $id ? $this->findOneOrFail($id) : new Article();
if ($model->load(\Yii::$app->request->post()) && $model->validate() && $model->save(false)) {
\Yii::$app->session->setFlash('success', 'Сохранено');
return $this->redirect(['article/list']);
}
return $this->render('form', ['model' => $model]);
}
Недавно услышал что это не SOLIDно... И типа надо делать отдельный GET метод получения формы, а сохранение и редактирование толи по разным методам, толи в один метод store... Вот хочется услышать объективное мнение как правильно. Нафига дублировать столько кода в угоду паттернам? Когда можно все в один метод залить и будет красиво.
Кстати, еще вопрос, почему метод со списком моделей называют index? Логичнее же list. А метод удаления во многих примерах destroy, хотя казалось бы delete...
Ответы (1 шт):
Лучше делать каждый метод отдельно, как вы в принципе сейчас можете увидеть в GII.
Это делается, потому что
- код в дальнейшем легче доработать
- нет 100500 if-ов
- нет даже намёка на какую-то совмещенную логику.
Всё по полочкам, ищи логику ровно в нужном методе, это круто.
Касательно совмещёнки, это плохой тон, такая практика целенаправленно используется только если
- делать что-то надо очень быстро, и будет рефакторинг
- нет уверенности, что это нужный функционал, сказали "давайте потестим, и быро там, нам архитектура не нужна"
- это прототип, который надо только вам.
Вы же в реальной жизни, например, не смешиваете алкоголь по чём зря, мотивируя это как а какая разница то? в желудке же перемешается. Ну а если вам ещё и лекарство пить, так мб тогда и лекарство в общую тару, да, перемешается же?
Это классный подход, как кажется сначала, и классный он на каких-то дешёвых веб студиях, где надо быстро, и за 5 мин. В продукте за такое могут(и будут в 99% случаев) "бить по рукам"
upd, кстати, а вот задумайтесь: чем плох смешанный алкоголь?
Правильно, тем что чтобы настало "бо-бо", нужно гораздо меньше выпить, и "бо-бо" будет более жесткое, чем если просто пить что-то одно по градусу.
Так же и в разработке: гавнокод делает "бо-бо"(в нашем случае тех.долг) всегда. Гавнокод в квадрате только усугубляет положение проекта, и зачастую приводит к тому, что правка чего-то лёгенького ВСЕГДА будет огромной, титанически сложной задачей