1
resposta

Usando DTO e Service

O DTO é boa prática. Quanto ao service posso usá-lo tb junto com DTO no mesmo projeto? Colocando o meu repository num service e chamando esse service quando efetuar transações de banco.

1 resposta

Oi Victor,

Sim, pode usar o padrão Service também, sem problema algum.

Eu só não gosto de utilizar Service que funciona apenas como Delegate para o repository. Por exemplo:

@Service
public class TopicoService {

    @Autowired
    private TopicoRepository repository;

    public void cadastrar(Topico topico) {
        repository.save(topico);
    }

    public void remover(Topico topico) {
        repository.delete(topico);
    }

    //outros metodos...
}

Repare que a única coisa que o service anterior faz é delegar para o repository. Fica parecendo que a classe é meio "inútil", sendo desnecessária :D

Agora, nos casos em que existem regras de negócio aí sim faz sentido ter uma service, para que as lógicas não fiquem espalhadas nos controllers. Por exemplo:

@Service
public class CadastroTopicoService {

    @Autowired
    private TopicoRepository repository;

    public void cadastrar(Topico topico) {
        //Regra de Negocio: Nao pode postar mais de 5 topicos num intervalo de 10 minutos!
        Long qtdTopicosAbertosNosUltimos10Minutos = repository.algumMetodoParaFazerCount(...);
        if (qtdTopicosAbertosNosUltimos10Minutos == 5) {
            throw new RegraDeNegocioException("mensagem de erro!");
        }

        repository.save(topico);
    }
}

Repare que a service anterior agora tem códigos de regra de negócio, não apenas delegando seu trabalho para o repository :)

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software