Estoy estudiando limpio y, como resultado, estoy repensando bastante dramáticamente mucho cómo diseño y escribo el software.
Sin embargo, todavía estoy luchando con reglas comerciales como "guardar actualizaciones de algún elemento, primero cargar toda la lista de elementos que tengo permiso para ver / editar, etc., confirme que este elemento está en la lista, y que la categoría de elementos no está bloqueada actualmente para su uso (y otras reglas, etc., etc.) "porque esa es una regla empresarial (compleja pero no atípica), por lo que debe manejarse en el dominio de la aplicación en lugar de impulsar la lógica empresarial la capa db / persistencia.
Sin embargo, me parece que para verificar de manera eficiente estas condiciones, a menudo se manejará mejor con una consulta db bien diseñada, en lugar de cargar todos los datos en el dominio de la aplicación ...
Sin una optimización prematura, ¿cuál es un enfoque recomendado o algunos artículos del tío Bob que aborden esta pregunta? ¿O diría "validar en el dominio hasta que se convierta en un problema"?
Realmente estoy luchando por encontrar buenos ejemplos / muestras para algo que no sea el más básico de los casos de uso.
Actualizar:
Hola a todos, gracias por las respuestas. Debería haber sido más claro, he estado escribiendo software (principalmente aplicaciones web) durante mucho tiempo, y definitivamente ya he experimentado y estoy de acuerdo con todos los temas que describe colectivamente (validar por backend, no confíe en los datos del cliente, en general persiga la eficiencia en bruto solo cuando sea necesario, sin embargo, reconozca las fortalezas de las herramientas db cuando estén disponibles, etc., etc., y haya seguido el ciclo de vida de aprendizaje del desarrollador de "unir todo" para "construir un controlador gordo gigante con tendencias de código de aplicaciones N-niveles" , y ahora realmente le gusta e investiga el estilo de responsabilidad limpio / único, etc., básicamente como resultado de algunos proyectos recientes que evolucionaron en reglas comerciales bastante torpes y ampliamente distribuidas a medida que los proyectos evolucionaron y surgieron más requisitos del cliente.
En particular, estoy mirando la arquitectura de estilo limpio en el contexto de la construcción de apis REST para la funcionalidad de uso interno y de cara al cliente, donde muchas de las reglas de negocio pueden ser mucho más complejas que básicamente cada ejemplo que ve en la red (incluso por los chicos de la arquitectura Clean / Hex).
Así que supongo que realmente estaba preguntando (y no pude decir claramente) acerca de cómo Clean y una API REST se unirían, donde la mayoría de las cosas MVC que ves en estos días tienen validadores de solicitudes entrantes (por ejemplo, la biblioteca FluentValidation en .NET), pero donde muchos de mis reglas de "validación" no son tanto "es una cadena de menos de 50 caracteres" sino más "puede este usuario que llama a este usuario / interactor realizar esta operación en esta recopilación de datos dado que algún objeto relacionado está actualmente bloqueado por Team X hasta más adelante en el mes, etc., etc. "... ese tipo de validaciones profundamente involucradas donde MUCHOS objetos de dominio de negocios y reglas de dominio son aplicables.
¿Debo convertir esas reglas en un tipo específico de tipo Validator-object para acompañar cada usecase-interactor (inspirado en el proyecto FluentValidator pero con más lógica de negocios y acceso a datos involucrados), ¿debería tratar la validación de alguna manera como un Gateway? poner esas validaciones en una puerta de enlace (que creo que está mal), etc.
Como referencia, me voy de varios artículos como este , pero Mattia no discute mucho sobre la validación.
Pero supongo que la respuesta corta a mi pregunta es muy parecida a la respuesta que he aceptado: "Nunca es fácil y depende".