1
resposta

[Dúvida] Comunicação entre model, service e repositrory

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.

1 resposta

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:

  • A entidade Pedido encapsula o estado e as regras de negócio relacionadas a um pedido.
  • O PedidoService orquestra a criação de um pedido, aplicando regras de negócio e utilizando o PedidoRepository para persistir o pedido.
  • O 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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.