Для меня, в любом случае, различие заключается в том, что служба приложений используется на уровне интеграции / концерне. Интеграция появляется на периферии вашего решения, где «внешние» (внешние интерфейсы) обращаются к «внутренним» (web-api / обработчикам сообщений).
Как таковые, они обычно не получают входные данные в терминах доменные объекты, а скорее в примитивах, таких как идентификаторы и необработанные данные. Если взаимодействие достаточно простое, тогда объект, выполняющий взаимодействие (контроллер / процессор сообщений), может напрямую использовать механизм хранилища или запроса. На уровне интеграции выполняется обработка транзакций (начало / принятие).
Однако, если ваше взаимодействие требует согласования между двумя или более объектами домена, вы обычно выбираете службу приложений и передаете примитивные данные в , что . Вы могли бы , опять же, выполнить взаимодействие самостоятельно, кодируя все это в объекте, выполняющем взаимодействие (контроллер / процессор сообщений). Если вы обнаружите, что вы дублируете код, то, безусловно, требуется служба приложения.
Службы приложения, таким образом, будут выполнять сбор любых дополнительных данных, передаваемых в домен.
Служба домена с другой стороны, обычно работает непосредственно с объектами домена. Это не делает никакого дополнительного сбора данных. Мне нравится передавать все, что нужно домену на домен. Домен не должен вызывать , чтобы получить что-то дополнительное. Я также отошел от двойной отправки и скорее выполняю соответствующий вызов за пределами домена. Если задействован только один объект, вы можете проверить, нельзя ли перенести функциональность на сам объект домена. Например, вы можете go с driver.HiredBy(company);
, а инварианты можно применять в методе HiredBy
. То же самое с Fired()
. Кроме того, мне нравится возвращать доменные события от самих объектов: в классе Driver
у нас может быть DriverFirstEvent Fire(Company currentCompany);
Эти рекомендации могут отличаться в зависимости от ваших требований, поскольку ничто не вылито из камня.
То, что у вас есть в качестве примера, я бы отнес к категории службы приложений .