Quais são as diferenças entre as camadas na arquitetura centrada em domínio? agora, estou confuso entre as camadas, especialmente a camada de aplicativo e a camada de serviço de domínio. alguém pode explicar as diferenças entre as camadas, com exemplos?

Oh garoto. eu tenho alguns

de tempo extra e isso provavelmente será um pouco longo de resposta. Eu gostaria de poder vincular você a uma hora de vídeo que tenho sobre o assunto, mas está por trás de um paywall. Abordo tudo isso no meu curso sobre o assunto, se você quiser um link, posso obter um desconto.

Então, para pensar sobre isso, precisamos começar a pensar em um cliente

Cliente = → Fazer alguma coisa → Serviço de aplicativo

Observe que pode ou não haver um limite de camada entre o cliente e o serviço de aplicativo. Isso pode ser apenas uma chamada na memória ... Isso não é importante para o restante da discussão.

Serviço de Aplicação

O Serviço de Aplicativo é o que irá

coordenada

esse comportamento de domínio. Você me disse para "fazer alguma coisa", agora eu vou fazer. Um exemplo disso pode ser que você me disse para DeactivateInventoryItem, meu serviço é o

ponto de entrada

para isso e coordenará o modelo de domínio para que esse comportamento ocorra.

Também tendemos a passar dependências para o Serviço de Aplicativo (eh?) Geralmente via injeção de construtor.

Como exemplo, apenas usando C #, mas deve ser compreensível se você conhece Java etc e, francamente, seu código bastante trivial:

classe pública DeactivateInventoryItemAppService {

public DeactivateInventoryItemAppService (repo IInventoryItemRepository) {

_repo = repo;

}

public void Deactivate (ID do guia, motivo da sequência) {

var item = _repo.GetById (id);

item.Deactivate (reason);

}}

Note que não há

comportamento

no serviço de aplicativo? Ele procura o objeto de domínio correto e, em seguida, chama um comportamento nele. Isto é

coordenando

o comportamento. É procurar os objetos certos e pedir para eles fazerem o trabalho

não fazendo o trabalho

. Essa diferenciação é

extremamente

importante!

Há um desses serviços por comportamento (também conhecido como caso de uso) que seu modelo suporta. Basicamente, isso está agindo como um

fachada

.

Existe, no entanto, outro serviço comumente conhecido como

Serviço de Domínio

.

Um Serviço de Domínio é para onde vai a lógica que não se encaixa em um Agregado. Obviamente, eu preferiria ter o comportamento para as coisas configuradas, como no exemplo acima, em que Desativar afeta apenas um único agregado, mas e quando ... não ?! E se isso afetar

múltiplo

?! Também pode ser um cálculo bastante complexo derivado de múltiplos (embora, neste caso, muitas vezes seja melhor representar o resultado ...)

Serviços de Aplicação

são um

ponto de entrada

Serviços de Domínio

execute uma tarefa (geralmente uma envolvendo vários agregados!). Se eles não estavam coordenando entre vários agregados, provavelmente esse comportamento deveria estar em qualquer agregado ... não ?! :)

.

.

Existe de fato

mais um serviço

que vale a pena discutir também. Isso seria um

Serviço de infraestrutura

. Estes são serviços no domínio que representam caminhos

fora do domínio

Por exemplo, preciso fazer uma transação no sistema contábil. Eu represento essa interação com um serviço. Isso me permite dar linguagem a essa chamada internamente (e possivelmente ocultar detalhes de sua implementação geral!). Também é bastante útil quando ... testando ... não? :)

Quando as pessoas discutem

Serviços de infraestrutura

eles geralmente os discutem em termos da arquitetura hexagonal (portas e adaptadores). Eles têm um contrato que faz parte do domínio, mas sua implementação dura

lado de fora

.

Pensar nesses serviços em termos de portas / adaptadores facilita muito o reconhecimento preciso do que eles estão fazendo. Eles são

traduzindo

e

fornecendo linguagem para

coisas do lado de fora. Eles são

ocultando os detalhes

do que está envolvido e

dando linguagem

para as coisas do lado de fora. Os contratos fazem parte do domínio, as implementações estão fora.

Espero que isto ajude!