Мы работаем над рядом услуг, скажем PersonService
, InsuranceService
и PaycheckService
. Для доступа к этим услугам через API есть контроллер.Разрешить связь между службами?
Бывают ситуации, когда PaycheckService
нуждается в информации о Person
. В настоящее время мы используем слой между Controller
и Service
к:
- Получить информацию от PersonService
- Получить информацию от PaycheckService
- комбината и вернуть результат.
Эта работа в данный момент, но при создании большего количества сервисов зависимость между услугами увеличивается. Это приводит к большей логике (магии?) В этом 'между слоем'.
Я читал Фаулер по теме «Инъекция зависимостей» и «Локатор услуг», который может быть полезен. (мы используем Unity для IoC и DI здесь и там для совместной работы)
Вопрос в том, что является хорошей стратегией, позволяющей сервисам использовать другие услуги?
(Messaging, Инъекции, REST, ..)
Два вопроса: (1) Зачем вам нужен «PersonService» и (2) почему «PaychecService» не может владеть только теми частями информации, которые ему нужны. Вы можете подумать о том, чтобы делиться личностью человека (то есть идентификатором) между службами, но пусть каждая служба владеет и обслуживает все данные, необходимые ей для принятия своих бизнес-решений, и, таким образом, оставаться автономными. – Alex
1) Служба Person и Paycheck - это просто примеры. 2) В этом упрощенном примере реальное приложение имеет множество доменов с соответствующими службами. Было бы неправильным решением позволить каждому домену просто запросить то, что ему нужно, только чтобы сделать с ним. –
Когда я упомянул «собственные данные», это означает, что вы не запрашиваете, а владеете и управляете данными, которые ему необходимы для выполнения своей деятельности. Идентификатор, который является общим, может затем использоваться для корреляции объекта между службами, без необходимости полагаться на какой-либо тип общей модели объекта. Каждый домен может иметь свою собственную модель объекта, содержащую только то, что ему нужно. Хранение услуг сфокусировано, независимо и изолировано. То есть а не модель данных, разделяемая между службами. – Alex