Вот есть пользователь (User
), вот есть купоны на скидки (PromoCode
). Тебе нужно применить одно к другому.
Где разместить этот код?
В модели пользователя? Неправильно, ведь этот код дергает модель купона и он больше про скидку, чем про юзера.
В модели купона? Неправильно, ведь этот код изменяет только данные пользователя и ничьи больше.
Выход? Создай класс PromoCodeToUserApplyController
. Пусть даже там будет всего пара методов, зато точно понятно, зачем этот класс и к чему он относится. Поверь, он разрастется.
А если метод только один, то назови класс PromoCodeToUserApplyHelper
. И, кстати, хорошо в объектно-ориентированном проекте избавиться он голых функций и все вынести в классы. Да, многие тебе скажут что так делать не надо, но они имеют в виду другое. Плохой тон не в том чтобы избегать классов там, где достаточно функции; плохой тон — плодить бессмысленные классы. То есть классы, название которых не отражает их суть. Я за то, чтобы было много всяких разных изолированных сущностей и много методов, и у каждого — свое понятное название. Тогда код легко читается.