Estou com dúvida em algumas questões aqui com o Open Closed Principal, gostaria muito que você me ajudasse a responder minhas dúvidas.
1- Dúvida: Foi passado no curso, que para fazer as validações eu passo os argumentos diretamente, por exemplo: listaValidacoes.forEach(v -> v.verification(validacao1, validacao2)); Porém, eu gostaria de passar dentro de uma classe, por exemplo v- > v.verification(new VerificationArgs(validacao1, validacao2); O porque disso? Acho que para fazer manutenção é muito melhor, pois se for adicionar mais algum atributo para fazer validação, é só adicionar na classe VerificationArgs e passar ele como argumento no forEach, outro fator que eu acho que por que dessa forma é melhor, é pq eu não vou precisar sempre ter na assinatura do método, os attributos que eu não vou utilizar, desse novo jeito que eu disse, eu só puxo do VerificationArgs os atributos que vou precisar usar naquela classe para validar, assim não tendo atributos inuteis na assinatura do método, exemplo :
Então nessa classe, eu só puxo o atributo que vou utilizar, e na assinatura do método não fica poluída com atributos que não vou utilizar NESSE método para fazer validações, Dessa forma está correta?
2- Dúvida:
Como eu estava falando anteriormente, eu estava usando uma classe para representar esses dados que serão necessários para fazer validação, eu posso usar em forma de Record? lembrando que os dados são imutáveis, só vou usar para validar, e não alterar nada com eles.
3- Dúvida: Como podem ver, eu usei o SecretaryRepository como parametro pois em uma das validações vou precisar puxar esse repository para verificar se o o e-mail que está sendo passado na requisição já existe no banco, tem sentido? Eu preferi fazer dessa forma para não ter que injetar na classe que valida isso diretamente, como já está sendo injetada no SecretaryService, achei melhor só transferir o repository de classe mesmo, do que ter que injetar novamente na classe que vai precisar fazer validação com esse repository. Então, evito o seguinte :
4- Dúvida: Exemplo: tanto para cadastrar um usuário no sistema quanto para atualizar, eu tenho que verificar se o cpf tem um formato válido, então eu tenho uma classe para validar para atualizar e outra para registrar, não são a mesma classe pois uma recebe um tipo de DTO, e a outra outro tipo de DTO, então a validação para registrar e atualizar um usuário ficam em classes diferentes, porém a lógica(regra de negocio) , código para validar se o cpf está em um formato válido é a mesma, então eu isolei essa lógica em uma classe separada, e só chamei esse método nas 2 classes, para registrar e para atualizar, fiz isso para não ter que reescrever o mesmo código 2 vezes.
Lógica :
Estou chamando o método para REGISTRAR um usuário :
Estou chamando método para ATUALIZAR um usuário :
Desculpem pela quantidade de perguntas, mas são extremamente importantes para mim e já estou um tempo com dúvida, se puderem responder por gentileza.