Al desarrollar mis interfaces (contratos) y las implementaciones concretas de ellos, tanto los modelos de datos como los repositorios, me pregunto dónde debe ir la lógica de validación. Parte de mí (que tiende a ganar) dice que la clase en sí misma debería ser responsable de su propia validación (longitud máx. De cadena, búferes de fecha, etc.), pero la otra parte de mí dice que esto debería trasladarse al repositorio porque depende en el almacén de persistencia, estos valores podrían cambiar en función de la implementación de su repositorio.¿Dónde debe implementarse la lógica de validación?
Creo que hay algo de validación que DEBE hacerse en el nivel de clase y creo que probablemente debería mantenerse junto y no cambiar incluso si el repositorio lo hace, por eso tiendo a mantenerlo en la clase.
Me refiero a la validación de la interfaz de usuario, pero esto nunca es suficiente, ya que gran parte de la validación de la IU se puede eludir.
Curioso lo que la gente piensa y el razonamiento detrás de esto.
Ninguno si debe derivarse de la base de datos. Más bien, viceversa, si uno va a conducir al otro. No dicte el comportamiento del usuario desde su esquema de base de datos. Además, no desea que sus pruebas de unidad de clase dependan de las conexiones y los artefactos de la base de datos. – dkretz