Napok óta egy olyan elegáns megoldást próbálok kidolgzozni-beépíteni, amivel dinamikusan tudom kezelni (konfigurálni) az MVC View-khoz tartozó ViewModel-ek viselkedését.
Ezalatt azt értem, hogy például nagyon jól és egyszerűen lehet használni a gyári attribútumokat, többek között a validáláshoz és a control helperekhez tartozó label szövegek kiírásához, DE. Mindig van DE :).
Az alap problémám az volt, hogy ezek az attribútumok ugyan jók, de mi van, ha a validáció függ valamitől, valamilyen adattól, kliensen kiválasztott/beírt értéktől, parent view-tól függően más kötelező, workflow állapottól függően másképp kell validálni stb. Vagy mi van, ha ugyanígy a textbox elé írt label szövege függ valamitől. Például ha 2000 EUR-nál nagyobb az összeg, akkor CK Base Rate-et kell kiírni, ha kisebb akkor FH Base Rate-et. De a tartalom, mögötte a ViewModel-ben a property ugyanaz. Ezt nem olyan egyszerű megoldani, mert ha beégetjük az attribútumokat, akkor még a soksok if mellett is lesz fejtörés bőven.
Ugyan nem a spanyol viaszt találtam fel, de néhány ötletet találva és összerakva a végeredmény az lett, hogy egy custom meta data kezelőt írtam, ami egy adatforrásból kiolvassa (most épp xml-ből, de csatolható alá bármi) az atott típus adott property-jéhez az ADOTT KONTEXTUSBAN meghatározott attribútumait, és ezeket dinamikusan pakolja rá.
Majd ezeket a HtmlHelper-ekben már a megszokott módon lehet kezelni, kiolvasni, és így egy komplett parciális View összerakásának kódja amiben 20 property adata van, nem több 20 sornál. És újrahasznosítható ez a 20 sor is, el tudom helyezni ugyanazzal a ViewModel-el egy print formra is, vagy egy tök más readonly felületre, beviteli formra, csak az xml-ben másképp kell felkonfigurálni a viselkedését, hozzá tartozó label szövegezését.
Ezen túl gyakorlatilag a határ a csillagos ég, hiszen írhatok custom attribútumokat, amikkel egyéb custom viselkedést írhatok le, és ezeket is az xml-ben írom le, vagyis fordítás és programozás nélkül meg tudom határozni. Sőt, továbbmegyek, EA-ban megrajzolt ábrákból az xml-t ki lehetne generálni.
Nem írnék konkrét kódot, inkább 3-4 linket, amiből el lehet indulni:
Using TemplateHint and other Model Metadata features in MVC
Get Custom Attributes from Lambda Property Expression
ASP.NET MVC LabelFor Helper With HtmlAttributes
Accessing attributes from Custom Html Helpers
Az alapötlet az első linken elérhető blogbejegyzésből jött, a többi az inkább segítség a továbbiakhoz.
Nincsenek megjegyzések:
Megjegyzés küldése