No curso não fica claro como minha entidade de domínio, vai chamar o meu service ou vice-versa e depois como chamar a repository.
No curso não fica claro como minha entidade de domínio, vai chamar o meu service ou vice-versa e depois como chamar a repository.
Opa, tudo bem?
Vou tentar explicar de forma clara como acontece a comunicação entre as camadas em uma aplicação utilizando Domain-Driven Design (DDD).
Entidade de Domínio: esta é a representação do seu modelo de negócio. As entidades de domínio não devem chamar diretamente os serviços ou repositórios. Elas são focadas em encapsular as regras de negócio e o estado do seu domínio.
Service: os serviços são responsáveis por orquestrar as operações de negócio. Eles utilizam as entidades de domínio para executar as regras de negócio e, em seguida, interagem com os repositórios para persistir ou recuperar dados.
Repository: os repositórios são responsáveis por interagir com a camada de persistência (banco de dados, por exemplo). Eles fornecem métodos para salvar, atualizar, deletar e buscar entidades de domínio.
Vou deixar este código para melhor compreensão:
// Entidade de Domínio
public class Pedido {
private Long id;
private List<Item> itens;
private BigDecimal total;
public void adicionarItem(Item item) {
this.itens.add(item);
this.total = this.total.add(item.getPreco());
}
// getters e setters
}
// Service
public class PedidoService {
private PedidoRepository pedidoRepository;
public PedidoService(PedidoRepository pedidoRepository) {
this.pedidoRepository = pedidoRepository;
}
public void criarPedido(Pedido pedido) {
// Regras de negócio
if (pedido.getItens().isEmpty()) {
throw new IllegalArgumentException("Pedido deve ter pelo menos um item");
}
// Persistir o pedido
pedidoRepository.save(pedido);
}
}
// Repository
public interface PedidoRepository {
void save(Pedido pedido);
Pedido findById(Long id);
List<Pedido> findAll();
}
Ou seja:
Pedido
encapsula o estado e as regras de negócio relacionadas a um pedido.PedidoService
orquestra a criação de um pedido, aplicando regras de negócio e utilizando o PedidoRepository
para persistir o pedido.PedidoRepository
é uma interface que define os métodos para interagir com a camada de persistência.Caso você tenha curiosidade em dar uma olhadinha no nosso Alura+ sobre Domain-Driven Design (DDD) - O que é?, fique à vontade.
Abraços!