Должна ли модель изменять другие модели или контроллер должен менять каждую модель? (Rails или другая архитектура Model-Controller)

В серверном приложении, где существуют такие модели, как «Статьи», «Вакансии», «Рабочие» и

Например, в приложении на стороне сервера, где есть эти модели:

  • Товары
  • Работа
  • Рабочие

И есть такое действие, как 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 фреймворке, (обратите внимание, что меня не волнует представление, потому что служба должна только экспортировать данные. Представление находится только на стороне клиента, который запрашивает данные).

Я читал о Должны ли модели рельсов быть связаны с другими моделями ради тонких контроллеров? но я хотел бы, чтобы что-то более подробное объяснялось, если это возможно, также со ссылками на книги/ссылки по этой теме.

Спасибо, что уделили время чтению моего вопроса (:


person Totty.js    schedule 11.01.2013    source источник
comment
Рассматривали ли вы возможность извлечения логики в сервисный объект? (sporto.github. com/blog/2012/11/15/ , blog.codeclimate.com/blog/2012/10/17/ )   -  person dimuch    schedule 11.01.2013
comment
Хорошо, но у этого будет JobStarter(job).start(args...), тогда он попадет во вторую часть, где job.start запускает задание на уровне задания, а не на уровне приложения. Мои задания/запуск службы/контроллера похожи на JobStarter, поэтому ничем не отличаются. Обратите внимание, что в моей системе служба может вызывать другую.   -  person Totty.js    schedule 11.01.2013