#318

Создавай хелперы для межмодельного кода

Вот есть пользователь (User), вот есть купоны на скидки (PromoCode). Тебе нужно применить одно к другому.

Где разместить этот код?

В модели пользователя? Неправильно, ведь этот код дергает модель купона и он больше про скидку, чем про юзера.

В модели купона? Неправильно, ведь этот код изменяет только данные пользователя и ничьи больше.

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

А если метод только один, то назови класс PromoCodeToUserApplyHelper. И, кстати, хорошо в объектно-ориентированном проекте избавиться он голых функций и все вынести в классы. Да, многие тебе скажут что так делать не надо, но они имеют в виду другое. Плохой тон не в том чтобы избегать классов там, где достаточно функции; плохой тон — плодить бессмысленные классы. То есть классы, название которых не отражает их суть. Я за то, чтобы было много всяких разных изолированных сущностей и много методов, и у каждого — свое понятное название. Тогда код легко читается.