В многоуровневой архитектуре с уровнем обслуживания допустимо ли, чтобы одна служба вызывала другую службу? - PullRequest
4 голосов
/ 26 октября 2011

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

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

Можно ли, чтобы служба A выполняла вызов другого метода в ServiceB?Это, конечно, создало бы зависимость от службы B в службе A (я использую интерфейсы и DI).

В моем примере у меня есть служба пользователя, которая обрабатывает, добавляет пользователей, проверяет подлинность пользователей, находит пользователяпо идентификатору и т. д. У меня также есть сервис Book, который позволяет мне добавлять книги для конкретного пользователя.

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

Ответы [ 3 ]

6 голосов
/ 26 октября 2011

Краткий ответ: да

Чуть менее краткий:

Вы можете либо позволить «книжному сервису» напрямую обращаться к «пользовательскому репозиторию», либо расширить сервис пользователя таким образом, чтобы онможет добавить книгу - ни один хороший вариант ... поэтому правильно делать то, что вы описываете (книжный сервис обращается к пользовательскому сервису) ... более "чистый вариант" - создать контроллер / агрегат / транзакцию /Служба координаторов, которая использует службу книг и службу пользователей для достижения того, что вы описываете, таким образом, как «прямые услуги» (книга и пользователь) остаются «свободными от зависимостей» ...

1 голос
/ 26 октября 2011

Да, это приемлемо, если это имеет смысл.

Если службе книги требуется логика для запуска из службы пользователя, и служба книги не вызывает службу пользователя, вам придется продублировать логику службы пользователя в службе книги. Это означает, что если ваша бизнес-логика меняется в зависимости от того, что делает логика сервиса, вы должны обязательно обновить сервис книги с помощью логики, иначе у вас будут ошибки и непоследовательное (и неожиданное) поведение.

Однако, если вы обнаружите, что это часто происходит, вам, возможно, придется начать смотреть на то, какие функции выполняет каждый сервис, и, возможно, разбить их на более мелкие сервисы.

0 голосов
/ 26 октября 2011

Пользователь упомянул, что он использует EF.В этом случае он может либо передать объект пользователя в службу книг или идентификатор пользователя и создать объект пользователя в хранилище книг перед сохранением.

...