Estou estudando limpeza e, como resultado, estou repensando bastante de maneira significativa como projeto e escrevo software.
No entanto, ainda estou lutando com regras comerciais, como "salvar atualizações de algum item, carregar primeiro. Toda a lista de itens que tenho permissão para exibir / editar etc., confirme se esse item está na lista, e que a categoria do item não está atualmente bloqueada para uso (e outras regras, etc, etc) ".. porque essa é uma regra de negócios (complexa, mas não atípica) e, portanto, deve ser tratada no domínio do aplicativo, em vez de empurrar a lógica de negócios para dentro. a camada db / persistence.
No entanto, parece-me que, para verificar com eficiência essas condições, geralmente é melhor lidar com uma consulta db bem criada, em vez de carregar todos os dados no domínio do aplicativo ...
Sem a otimização prematura, qual é a abordagem recomendada ou alguns artigos do tio Bob que lidam com essa pergunta? Ou ele diria "validar no domínio até que se torne um problema"?
Estou realmente lutando para encontrar bons exemplos / amostras para algo que não seja o mais básico dos casos de uso.
Atualizar:
Olá a todos, obrigado pelas respostas. Eu deveria ter sido mais claro, estou escrevendo um software (principalmente para aplicativos da Web) há muito tempo e definitivamente já experimentei e concordo com todos os tópicos que você descreve coletivamente (valide pelo back-end, não confie nos dados do cliente, em geral busque a eficiência bruta apenas quando necessário, mas reconheça os pontos fortes das ferramentas db quando disponíveis, etc etc) e tenha passado pelo ciclo de vida de aprendizado do desenvolvedor de "junte tudo" para "construir um controlador de gordura gigante com aplicativos de camadas N" tendências de código e agora realmente gostando e investigando o estilo de responsabilidade limpa / única etc., basicamente como resultado de alguns projetos recentemente que evoluíram para regras de negócios bastante desajeitadas e amplamente distribuídas à medida que os projetos evoluíam e outros requisitos do cliente vieram à tona.
Em particular, estou analisando a arquitetura de estilo limpo no contexto da criação de APIs REST para funcionalidade voltada para o cliente e para uso interno, onde muitas das regras de negócios podem ser muito mais complexas do que basicamente todos os exemplos que você vê na rede (mesmo pelos próprios caras da arquitetura Clean / Hex).
Então, eu acho que estava realmente perguntando (e falhei em declarar claramente) sobre como o Clean e uma API REST se acomodariam juntos, onde a maioria das coisas do MVC que você vê atualmente tem validadores de solicitação de entrada (por exemplo, biblioteca FluentValidation no .NET), mas onde muitos minhas regras de "validação" não são muito "é uma string com menos de 50 caracteres", mas mais "pode esse usuário que chama esse banco de dados / interator executar esta operação nesta coleta de dados, dado que algum objeto relacionado está atualmente bloqueado pelo Time X até o final do mês etc etc "... esse tipo de validação profundamente envolvida, onde MUITOS objetos de domínio de negócios e regras de domínio são aplicáveis.
Devo girar essas regras para um tipo específico de objeto Validator-objeto para acompanhar cada interator-caso de usuário (inspirado no projeto FluentValidator, mas com mais lógica de negócios e acesso a dados envolvidos), devo tratar a validação como um Gateway, devo coloque essas validações em um gateway (que eu acho errado), etc etc.
Para referência, estou publicando vários artigos como este , mas Mattia não discute muito sobre validação.
Mas acho que a resposta curta para minha pergunta é muito parecida com a resposta que aceitei: "Nunca é fácil e depende".