Rules Validation/Validar Regras
Imagine this, you have thousands of rules to implement…(maybe not thousands). And you want to do a nice job to impress someone, maybe the angry senior right next to you.
First understand the rules you have to implement.
What you shouldn’t do!
Why?? What if the validation has to be modified? What if you don’t have access to this validation?
This breaks the principles in SOLID, in particular “S”->Single Responsibility Principle and “O” -> Open to Extend Close to Modify Principle.
You have one class to validate everything.
And every time you add more properties you have to modify the same Class(a simple case imagine you have to do this 2 times each month).
Maybe the right way to do it!
Create your class the insert all the properties.
In this case we only have one property, “Name”,
I also added a List of error messages just to give me feedback about each failed validation.
The MasterClass is just an abstrat class. You will understand why later.
Then make an interface where you will implement the rule classes.
Just a “normal” interface, with a simple method.
Now make all the Rules.
As you can see, a normal validation for the property “Name”. In this case is valid if “Name” is equal to “valid”. The Console.WriteLine(); is just for Debug purposes.
If Invalid then the Error List will add the error.
The second validation is the same thing, but “Name” needs to be “valid2”.
If it’s not valid, it will add an error into the list.
And so on. You get the idea.
Now we need to register the Rules.
The readable way(I guess!).
Now the method to make this work!!
Now you can see why the MasterClass, in case you have more objects to make validations.
The first Foreach will execute all the Rules we make and the second Foreach will show the Error List.
In this way you have the Rule Design Pattern. You have Single Responsibility and you can add more rules without make any modifications. You just need to implement the Interface and register that Rule and… DONE.
Github: https://github.com/bteixeira691/ValidationBusinessRules
Validar Regras!
Imagine isto, você tem milhares de regras para implementar … (talvez não milhares). E você quer fazer um bom trabalho para impressionar alguém, talvez o Senior chato ao seu lado.
Primeiro, entenda as regras que você deve implementar.
O que não fazer!
Por quê?? E se a validação tiver que ser modificada? E se não tiver acesso a essa validação?
Isso quebra os princípios do SOLID, em especial “S” -> Princípio de responsabilidade única e “O” -> Aberto para estender Fechado para a modificação.
Você tem uma classe para validar tudo. E toda vez que você adiciona mais propriedades, é necessário modificar a mesma classe (um caso simples, imagine que você faça isso duas vezes por mês).
Talvez o caminho certo para fazê-lo!
Crie sua classe e insira todas as propriedades.
Nesse caso, temos apenas uma propriedade, "Nome",
Também adiciono uma lista de mensagens de erro apenas para fornecer um feedback sobre cada falha na validação.
A MasterClass é apenas uma classe abstrata. Você entenderá o porquê mais tarde.
Em seguida, faça uma interface na qual você implementará nas classes para as Regras.
Apenas uma interface “normal”, com um método simples.
Agora faça todas as Regras!
Como você pode ver, é uma validação normal para a propriedade "Name". Nesse caso, é válido se "Name" for igual a "valid". O Console.WriteLine (); é apenas para o proposito de Debug.
Se for Inválido, a Lista de Erros adicionará o erro.
A segunda validação é a mesma coisa, mas “Name” precisa ser “valid2”. Se não for válido, adicionará um erro à lista.
E assim por diante. Você entendeu a ideia.
Agora é preciso registar as Regras.
A maneira mais legível (Acho eu!).
Agora, o método para fazer isso funcionar!!
Agora você pode verpor que a MasterClass, caso você tenha mais objetos para fazer validações.
O primeiro Foreach executará todas as Regras que criamos e o segundo Foreach mostrará a Lista de Erros. Dessa forma, você tem o Rule Design Pattern. Você tem responsabilidade única e pode adicionar mais regras sem fazer nenhuma modificação. Você só precisa implementar a interface e registrar essa regra e … CONCLUÍDO