Discussão em Português [pt-br] · ivanpaulovich/clean-architecture-manga · Discussion #149 (original) (raw)
Oi @marcrib vou me meter de novo hehe.
Teu negócio é dividido em duas camadas até onde entendo, uma camada de aplicação e uma de domínio.
Ambas as camadas tem regras, mas cada uma respeita um nível diferente.
Os casos de uso contém regras da camada da aplicação, não do domínio.
Vamos tentar exemplificar:
Tu tem dois casos de uso, um de cadastro de pessoa física e um de cadastro de pessoa jurídica. Eles são casos de uso diferentes pois no nosso exemplo atendem atores diferentes. O domínio da base é um só, PESSOA, mas ele pode vir com regras diferentes.
Se for no caso de uso de pessoa física, tu vai validar se tem rg e cpf. Se for pessoa jurídica, CNPJ e IE.
Essas regras para cadastrar essa pessoa pra cada caso de uso, ficam na camada de aplicação, ou seja, aonde estão os casos de uso.
Agora, existe uma regra mais embaixo disso. Independente do caso de uso, pode ser o número de caracteres de uma propriedade (nome pode ter no máximo 200 caracteres e no mínimo 3), qualquer coisa que seja referente ao objeto pessoa de forma geral, e não para um caso de único específico. Sei lá, você só pode alterar dados de uma pessoa ATIVA, independente se é física ou jurídica, então essa validação fica no domínio. Se alguma propriedade do PESSOA for alterada, ele valida o status. Ao invés de ser validado no caso de uso, a regra é de domínio.
Lendo agora, percebo que meu exemplo talvez tenha sido um pouco infeliz, mas não consigo pensar em outros exemplos agora... o que fica é a ideia que existem dois níveis de regra. A regra da aplicação, que é controlada dentro dos casos de uso, e a regra do domínio, que sempre precisa ser validada, independente de qualquer caso de uso.