armageddon_2k1 schreef op maandag 30 december 2019 @ 16:49:
Ben ik nou gek als ik zie dat voor de sanitation van een telefoonnr, zoals bij Rob, er hele threads opgespind worden (bij SO) of er allemaal annotations bij moeten komen ik dat een beetje overkill vind? Of mis ik een complete use case?
Je mist een complete use-case; de case waar je in je input flow data normalisatie een specifieke plek wilt geven voordaat validators draaien, zodat je validators generiek zijn en niet als
leaky abstractions zich bewust moeten zijn van evt. aanwezige sanitizations die per scenario verschillend kunnen zijn en die wel/niet door de validator toegelaten moeten zijn omdat aangenomen wordt dat ze later nog rechtgetrokken worden. (Gruwel...)
Telefoonnummers zijn wat dat betreft een goed voorbeeld; want er zijn veel verschillende manieren om die dingen te representeren, waarvan je er liefst één als canon neemt om een validator tegen te schrijven.
Echter, in een knap staaltje domheid heeft Microsoft in ASP.NET MVC al sinds de allereerste releases het draaien van model validators direct gekoppeld zitten aan het data-binden van de ruwe data aan een input model instance. Je moet bij wijze van met een breekijzer aan de gang omdat los te krijgen en er iets tussen te zetten wat dit af kan handelen, door zelf model binders - of erger: value providers - te gaan implementeren.
Enige andere werkbare manier is om voor bijv. telefoonnummers een toegespitste
PhoneNumber class te maken met een eigen ModelBinder die simpelweg een
PhoneNumber.Parse( ... ) doet; bij falen
ook een instance retourneert met een failure state er op gezet, en die zijn eigen validator implementeert middels de
IValidatibleObject interface om adhv die failure state alarm te slaan met het correcte type validatie-fout.
Dat is een heleboel concerns op één hoop gooien en je input model, wat idealiter een simpele POCO is, business-aware maken. En het is ook nog eens een heel, heel lelijk geval van failure state encoderen in success state. Bah!
[
Voor 28% gewijzigd door
R4gnax op 30-12-2019 20:25
]