Qual seria o melhor padrão de design para esse problema:
Eu tenho um Objeto A. O Objeto A pode ser registrado ou excluído do banco de dados, dependendo da solicitação do usuário.
A validação de dados é realizada antes do registro ou exclusão do objeto. Há um conjunto de regras a serem verificadas antes que o objeto possa ser registrado e outro conjunto de regras para exclusão. Algumas dessas regras são comuns para ambas as operações.
Até agora, acho que o padrão de design da Cadeia de Responsabilidade se encaixa mais, mas estou tendo problemas para implementá-lo.
design-patterns
melodui
fonte
fonte
Respostas:
Normalmente, usarei uma classe de validador separada para validar cada caso de uso. Por exemplo, antes de adicionar o produto ao banco de dados, usarei AddProductValidator para validar a regra de negócios, antes de excluir o produto, usarei DeleteProductValidator para validar etc. Regra de negócios comum pode ser extraída para a classe de especificação (padrão de especificação) e compartilhada pelas classes de validador
Para estruturar a classe do validador, sigo a abordagem aqui: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/
Se você usa o .NET, acho que você pode considerar a Validação Fluente ( https://github.com/JeremySkinner/FluentValidation ). Eu acho bem legal e bem perto do artigo que mencionei acima
fonte
Conforme descrito, eu provavelmente implementaria um tipo de opção . Dessa forma, eu poderia retornar um "Nenhum" ou um valor validado (talvez preguiçosamente), mas esse é um detalhe da implementação e leva muito à idéia de usar um Decorator .
Claro que se a interface se tornar feia eu usaria uma fachada .
fonte