В серверном приложении, где существуют такие модели, как «Статьи», «Вакансии», «Рабочие» и
Например, в приложении на стороне сервера, где есть эти модели:
- Товары
- Работа
- Рабочие
И есть такое действие, как start job, которое выполняет следующие действия:
- Продукты: количество запрошенного продукта задания увеличено
- Работа: работа вставлена
- Рабочие: рабочий задания установлен как недоступный и сохранена ссылка на текущее задание.
Теперь у меня вопрос: куда мне поместить описанную выше логику?
Должен ли я иметь контроллер с именем «jobs/start», который вызывает метод модели «job.start(args...)». Внутри этого метода модели он вызывает "product.increaseRequestedQuantity(args...)" и "worker.setBusy()"
Должен ли я иметь контроллер с именем "jobs/start", который вызывает "job.start(args...)", затем "product.increaseRequestedQuantity(args...)" и "worker.setBusy()"
Я действительно не знаю, что является лучшей практикой, в первой модели известно о других моделях, но логика является центральной. Во втором модели не знают друг о друге непосредственно, но логика более распределена. Кроме того, имея в задании метод с именем start, можно было бы предположить, что он запускает задание на уровне приложения (что означает изменение модели продукта и рабочего процесса), но влияет на уровне модели (означает, что изменяет только модель задания, без изменения продукта и рабочей модели).
Каково ваше мнение по этому вопросу и такому разделению интересов?
Это относится к людям, которые использовали Rails, даже если я не говорю конкретно о Rails (мой собственный фреймворк, основанный на сервисах+моделях в node.js, где сервис подобен контроллеру в Rails) или любом другом MC фреймворке, (обратите внимание, что меня не волнует представление, потому что служба должна только экспортировать данные. Представление находится только на стороне клиента, который запрашивает данные).
Я читал о Должны ли модели рельсов быть связаны с другими моделями ради тонких контроллеров? но я хотел бы, чтобы что-то более подробное объяснялось, если это возможно, также со ссылками на книги/ссылки по этой теме.
Спасибо, что уделили время чтению моего вопроса (: