DDD y validación del lado del cliente

Suponga que tiene una aplicación que utiliza el patrón de modelo de dominio, DDD y muchos otros patrones de diseño. Supongamos que tenemos una serie de soluciones que se enumeran a continuación:

Solution.Model Solution.Repository Solution.Services Solution.Presentation Solution.UI.Web

La capa de experiencia del usuario será Solution.UI.Web y asumiremos que será una aplicación ASP.NET WebForms. ¿Cómo se aplica la validación del lado del cliente?

Hay varias cosas a considerar:

En primer lugar, no deberíamos tener que presionar los servidores de aplicaciones / bases de datos para devolver los errores de validación al cliente, sin embargo, también podríamos implementar la validación del lado del servidor, pero necesitaremos la validación del lado del cliente como bien

Segundo, no queremos implementar las reglas de validación en la capa de experiencia del usuario. eso es porque si su aplicación es una aplicación web y luego decide crear un cliente WinApp también, tendrá que implementar las reglas de validación nuevamente -> pesadilla de mantenimiento.

Un enfoque simple sería implementar su lógica de validación dentro de sus objetos ViewModel (vistas planas de sus entidades de dominio que se enviarán al cliente) y luego validar esos objetos antes de llegar a los servidores de aplicaciones / bases de datos.

Otro enfoque, uno que he visto usado muchas veces en diferentes aplicaciones, es generar una colección de mensajes de error de validación y enviar esa colección al cliente. Eso está bien, pero hay un problema. solo un simple mensaje de resumen de errores de validación no funcionará, especialmente si tiene un formulario de entrada de datos grandes.

Ahora, el marco ASP.NET MVC hace la vida mucho más fácil. puede usar EF + DataAnnotations, y el marco MVC Scaffolding puede hacer la mayor parte del trabajo por usted. pero ese es el caso si desea crear una aplicación MVC e implementar su lógica de validación con jQuery y JavaScript.

Pero, ¿qué sucede si necesita un enfoque más genérico para implementar un marco de validación que pueda utilizarse y utilizarse en diferentes aplicaciones, por ejemplo, WinForms y WebForms?

Solo para aclarar, lo que estoy buscando es un conjunto de patrones / principios de diseño y / o técnicas / marcos para implementar un marco de validación que pueda implementarse dentro de su modelo de dominio y luego aplicarse en las aplicaciones de su cliente. Y, no solo quiero devolver una colección de mensajes de error de cadena sobre las reglas incumplidas ni nada, quiero poder actualizar mis controles vinculados a datos (TextBox, ComboBox, DateTimePicker, etc.) en caso de falla de validación para que el la capa de experiencia del usuario sería más intuitiva (si lo desea).

He visto algunas implementaciones y marcos aquí y allá, y he usado la validación del lado del cliente ASP.NET MVC por un tiempo, por lo que mi respuesta no tiene nada que ver con la validación MVC o JavaScript.