ho trovato una questione connessa con alcune risposte interessanti:
Mapping Validation Attributes From Domain Entity to DTO
Ho riflettuto su questo, e in un certo senso è analogo alla situazione che abbiamo con server-side e validazione lato client. (Ad esempio, utilizzo di NHibernate Validator e jQuery.validate).
In questi giorni è ben accettato che sia necessario un set completo di convalida sul lato server e l'aggiunta della convalida sul lato client è un'opzione che è possibile scegliere per rendere l'applicazione più user-friendly. In passato era necessario implementare manualmente la convalida sul lato client, ma si accettava la duplicazione del lavoro a causa del vantaggio nell'usabilità.
Direi che quello con cui abbiamo a che fare qui è molto simile. È avere la convalida nel livello del dominio. Non è possibile fare affidamento sulle applicazioni che consumano per aggiungere sempre la convalida.
Hai quindi l'opzione nell'applicazione di aggiungere la convalida sui tuoi modelli DTO/vista. Lo fai perché è più utile gestire gli errori di convalida nella vista piuttosto che lasciarli passare al dominio che potrebbe generare un'eccezione o dare un messaggio di errore meno utile. Il punto è che dal punto di vista del dominio non ci si basa su questo fatto. Sei ancora fiducioso nel tuo sistema perché sai che se i dati non validi vengono superati, il tuo modello lo catturerà.
Al giorno d'oggi il caso client/server non è un problema perché è stato fatto molto lavoro per automatizzarlo, generando il codice lato client dal codice lato server (ad esempio ModelValidatorProvider in ASP.Net MVC). Credo che man mano che sempre più persone utilizzeranno i modelli di visualizzazione/DTO inizieremo a vedere soluzioni simili per la mappatura automatica della convalida del dominio sui DTO (it's already happening with AutoMapper).
Così, in breve, la mia (pragmatico piuttosto che ideale;)) risposta è:
Accettare la violazione dei DRY, per ora, fare la convalida in entrambi i luoghi, e cercare di contribuire ai progetti che mirano a automatizzare in futuro
fonte
2011-01-11 11:09:49
Buon punto. L'ho fatto nel mio ultimo paio di domande per cercare di porvi rimedio. – nick