Убедитесь, что вы подписаны на нас в Facebook, Twitter, Website и, конечно же, YouTube.

Я получил вопрос от одного из самых активных пользователей Devlob, Умера Аббаса.

Я как-то упомянул в одном из своих видео, что контроллеры должны быть худыми, а модели толстыми.

Это верно лишь в некоторой степени.

Позвольте мне подробнее остановиться на этом.

Вы, контролеры, должны быть максимально худыми.

Я проверяю, что мои контроллеры содержат не более 4–5 строк кода. НЕТ БОЛЬШЕ ЭТОГО! (кроме случаев, когда это особый случай)

Чтобы это стало возможным, вы можете использовать различные техники.

1. Репозитории

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

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

Этот метод также помогает избежать частных методов в контроллерах, что лично мне совсем не нравится. Я хочу, чтобы в моих контроллерах было всего 7 действий с ресурсами, не более того!

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

Конечно, если вы все это сделаете, это будет означать, что ваш репозиторий будет классной задницей со слишком большим количеством кода ...

Так… это хорошо? Вы просто берете код со своего контроллера и передаете его в репозиторий? Неужели так работает?

Ну, нет ... Оттуда вам следует провести рефакторинг репозитория.

У вас есть несколько решений!

Вы можете использовать статические методы в своих моделях, чтобы ваши запросы были короткими.

Некоторым это не нравится ... но User :: byUsername (‘devlob’) так легко читается!

Толстит ли модель? Да! Мы этого хотим? Вроде! Чуть позже мы увидим, как работать с моделями.

2. Классы запросов

Поскольку мы говорим о запросах, вы можете использовать классы запросов, чтобы еще больше сократить код запроса до одной строки.

Подумайте о том, чтобы сделать это только для ваших длинных запросов. Не переусердствуйте!

3. Избегайте переключателей.

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

Это еще больше уменьшит количество кода в вашем репозитории.

Сделав все это и разделив свою логику на множество разных классов, даже ваш репозиторий будет достаточно коротким. Так что не о чем беспокоиться!

4. События и слушатели

Еще один отличный способ уменьшить количество кода в ваших контроллерах - это события и слушатели. У нас уже есть видео об этом, и мы знаем, как это работает. Если хотите освежить память, посмотрите это видео здесь.

События и слушатели настолько разделят логику, что вы влюбитесь в них.

5. Забудьте о if / else

Это не имеет большого значения, но я вижу, как многие люди этого не делают, и злюсь! Вы же не хотите видеть меня безумным! (подмигиваю)

Предположим, у вас есть такой код:

if (что-то)
return true
else
return false

Затем измените его на это

если (что-то)
вернет истину

вернуть ложь

6. Шаблоны проектирования

Существует так много шаблонов проектирования, которые могут еще больше уменьшить ваш код. Вы всегда должны учитывать шаблоны проектирования, когда это необходимо.

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

Мне нравится использовать шаблоны проектирования, такие как шаблон состояния, но в некоторых случаях мне трудно читать шаблон декоратора (как упоминалось выше).

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

Иногда они могут усложнить ваш код, поэтому выбирайте шаблоны проектирования с умом и используйте их по мере необходимости!

А как насчет моделей?

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

Вы также можете подумать о декораторах ... Но вы в конечном итоге переусердствуете и запутаете код. Честно говоря, я не очень часто их использую.

Вы можете сделать гораздо больше, чтобы ваши контроллеры оставались тонкими И ваша модель THIN, но описанные выше методы хватит!

Мы уже видели некоторые из вышеперечисленных методов на Devlob, но я обязательно буду создавать все больше и больше курсов, чтобы все это было понятно.

Убедитесь, что вы подписаны на нас в Facebook, Twitter, Website и, конечно же, YouTube.

А поскольку я очень привязан к социальным сетям, подписывайтесь на меня в Facebook и Instagram! Я обычно публикую посты, связанные с программированием, которым нет места в Medium.

Надеюсь, эта статья поможет вам поддерживать большие проекты! :)