fand ich eine ähnliche Frage mit einigen interessanten Antworten:
Mapping Validation Attributes From Domain Entity to DTO
ich darüber nachgedacht habe, und in gewisser Weise ist es analog zu der Situation haben wir mit serverseitigen und clientseitige Validierung. (z.B. unter Verwendung von sowohl NHibernate Validator als auch jQuery.validate).
Heutzutage ist es ziemlich gut akzeptiert, dass Sie über eine vollständige serverseitige Validierung verfügen sollten. Die clientseitige Validierung ist eine Option, die Sie auswählen können, um Ihre Anwendung benutzerfreundlicher zu gestalten. Früher mussten Sie Ihre clientseitige Validierung manuell implementieren, aber Sie akzeptierten die Doppelarbeit aufgrund des Nutzens der Benutzerfreundlichkeit.
Ich würde argumentieren, dass das, was wir hier behandeln, sehr ähnlich ist. Sie sollten Validierung in Ihrer Domain-Ebene haben. Sie können sich nicht darauf verlassen, dass die konsumierenden Anwendungen die Validierung immer selbst hinzufügen.
Sie haben dann in Ihrer Anwendung die Option, Ihre DTO/View-Modelle mit einer Validierung zu versehen. Sie tun dies, weil es hilfreicher ist, Validierungsfehler in der Ansicht zu behandeln, anstatt sie an die Domäne weiterleiten zu lassen, die eine Ausnahme auslösen oder eine weniger hilfreiche Fehlermeldung ausgeben könnte. Der Punkt ist, dass Sie sich aus der Domänenperspektive nicht darauf verlassen, dass dies getan wird. Sie sind immer noch zuversichtlich in Ihr System, weil Sie wissen, wenn irgendwelche schlechten Daten durchkommen, wird Ihr Modell es fangen.
Der Client/Server-Fall ist ein Problem in diesen Tagen, weil so viel Arbeit getan wurde, um es zu automatisieren, den clientseitigen Code aus dem serverseitigen Code (z. B. ModelValidatorProvider in ASP.Net MVC) generiert. Ich glaube, dass, wenn immer mehr Menschen die Verwendung von Ansichtsmodellen/DTOs aufgreifen, wir ähnliche Lösungen für die automatische Zuordnung der Domänenvalidierung zu den DTOs sehen werden (it's already happening with AutoMapper).
Also kurz gesagt, meine (eher pragmatisch als ideal;)) Antwort lautet:
Akzeptieren Sie die Verletzung von DRY für jetzt tun Validierung in beiden Orten, und versuchen, Projekte beizutragen, die es automatisieren wollen in Zukunft
Guter Punkt. Ich habe dies bei meinen letzten Fragen getan, um zu versuchen, dies zu beheben. – nick