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.
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.
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!