Единый экземпляр службы приложений в подходе DDD - PullRequest
0 голосов
/ 29 сентября 2018

Как я узнал о прикладной службе слоя, он должен быть без состояния , т.е. он не должен хранить какие-либо динамические данные в свойствах или полях.Таким образом, разные экземпляры службы приложений будут выполнять почти одно и то же.Значит ли это, что мы можем реализовать его как статический класс или использовать singleton шаблон?

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Я цитирую этот многоплановый курс Джули Лерман и Стива Смита .

Доменные службы не должны иметь состояния, хотя они могут иметь побочные эффекты.Это означает, что мы всегда должны иметь возможность просто создать новый экземпляр службы для выполнения операции, а не полагаться на какую-либо предыдущую историю, которая могла возникнуть в конкретном экземпляре службы.Но, конечно, результат вызова метода в службе может привести к изменению состояния самой системы.

Та же концепция применима к службам приложений.Обратите внимание, что Stateless НЕ означает static.Например, у нас может быть EmailSenderService ... служба отправляет электронное письмо и потенциально возвращает Успех / Сбой .Позже, если мы хотим отправить другое электронное письмо, мы создаем новый EmailSenderService для отправки электронного письма ... мы не полагаемся на тот факт, что предыдущее электронное письмо было отправлено успешно или нет.

Также как Ebenуказал, что сервисы часто вводятся потребителям, static типы не могут быть внедрены, и это одна из веских причин не использовать static сервисов.

Это действительно хорошая статья Джимми Богарда оуслуги в DDD .

Я также рекомендую проверить этот проект Дино Эспозито , как пример проекта DDD.

0 голосов
/ 02 октября 2018

Statelesness - это несколько загруженное понятие, которое люди используют для обозначения разных вещей в сервисе.

В любом случае, нистатические и одноэлементные не являются необходимыми или достаточными для обслуживания без сохранения состояния.Статическая служба может быть с полным состоянием, как и одноэлементная.

Другими словами, все свойства безгражданства могут сохраняться, даже если вы используете нестатический, не одноэлементный класс.То, что должно быть, должно быть вашим режимом по умолчанию, если у вас нет очень веских причин использовать эти подходы.

0 голосов
/ 29 сентября 2018

Служба без сохранения состояния должна передавать все состояния при вызове соответствующего метода.Сама прикладная служба может иметь другие зависимости, которые могут быть введены.

Инверсия зависимостей - ваш друг, и я бы не рекомендовал класс static.Скорее используйте некоторую инъекцию зависимостей с одноэлементным шаблоном, и если вы так склонны, я бы предложил использовать контейнер инъекций зависимостей, такой как Castle Windsor, StructureMap, Autofac, Ninject, Unity или SimpleInjector - я уверен, что есть и другие.

Если вы столкнетесь с синглетами, требующими состояния, у меня будет короткое видео об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...