Это веб-сайт ASP.NET MVC.Можно ли вызвать одну службу приложений из другой службы приложения?
В соответствии с проектированием, управляемым доменом, у нас есть сервисный уровень. Наши контроллеры просят классы сервисов приложений выполнять различные задачи, а затем направлять результаты в представления.
Бизнес-логика осуществляется классами обслуживания.
Так, например, у меня может быть класс AccountTasks
, который отвечает за регистрацию пользователей, редактирует их настройки и т. Д. Теперь мне также нужно иметь возможность автоматически подписывать пользователя на рассылку новостей сразу после регистрации или обновить их пользовательские настройки (тогда я бы изменил подписку на рассылку новостей).
Таким образом, функциональность подписки на бюллетень тесно связана с регистрацией/модификацией учетной записи.
Однако, я чувствую, что было бы лучше иметь отдельный класс обслуживания NewsletterTasks
, чтобы иметь дело с действиями по подписке/обновлению/отписанию.
Но этот класс не будет использоваться контроллером, но класс AccountTasks
.
Таким образом, рабочий процесс будет выглядеть так:
-> request made to controller action
-> controller calls AccountTasks
-> AccountTasks creates a user acoount
-> AccountTasks calls NewsletterTasks
-> NewsletterTasks subscribes the user to the newsletter
-> AccountTasks returns the result to the controller
-> controller fetches the appropriate view and sends it to the client
В качестве альтернативы, я бы контроллер назвать AccountTasks
первым, затем с помощью результата вызовите NewsletterTasks
. Но при таком подходе я чувствую, что контроллер слишком много знает о рабочем процессе, тогда как он должен просто передавать данные и результаты.
Задачи - это классы Application Service, проект основан на архитектуре S # arp с некоторыми изменениями, исходящими от Who Can Help Me, - который включает соглашения об именах для некоторых вещей.
Можно ли назвать NewsletterTasks
от AccountTasks
? Как бы вы это сделали?
Если я не представляю доменную службу, вы считаете, что все еще нормально, если AccountTasks вызывает NewsletterTasks (и имеет зависимость, мы используем DI)? Шимон ниже говорит, что он просто поместил его в контроллер, но я стараюсь оставить мои контроллеры глупыми, если можно, и делегировать любую бизнес-логику для обслуживания классов. Хотя я неохотно добавляю еще один слой, вся эта архитектура была для меня большим скачком. :) –
Я склонен согласиться - поддержание «немых» контролеров «больше поддерживает DDD. Причина, по которой я бы ввел ** UserRegistrationService **, - сделать действие домена * явным *. Однако, если ваша команда говорит, что вызов AccountTasks-> NewsLetterTasks кажется более естественным, просто пойдите с этим. DDD - это упрощение понимания и упрощение изменений. –