viewmodel rubrika: Programování: .Net

7 xxar3s
položil/-a 24.4.2018

viem ze v dynamickych jazykoch ako js to neni problem ale v staticky typovanych jazykoch neustale narazam na to ze musim stale daco konvertovat. napr entity z modelu do viewmodelu a ten do jsonu. najprv som to riesil tak ze na kazdy typ som si napisal konverzne funkcie ale ked ma entita 50 propsov tak 2 - 3 hodiny riesim len konverzie. preto som sa rozhodol ze aj v staticky typovanych jazykoch budem mat viewmodel nie ako typ ale ako slovnik. a dvtedy uz nemam problem. ako to riesite vy?

odkaz
9 Taco
odpověděl/-a 25.4.2018

Odpověď úkrokem stranou - já to řeším tak, že se snažím mět DO napříč vrstvami. Takže jediné konverze bych měl mít, když DO vytvořím ze surových dat v DAO, a pak když jej vykreslím jako komponenut/formulář ve view. Samozřejmě to asi nejde vždycky, ale jinak mi to vyhovuje.

Komentáře

  • harrison314 : Ako sa branis utoku overpostingom? Co validacia? 25.4.2018
  • Taco : Co si prosímtě mám představit pod overpostingem? 25.4.2018
  • Taco : Datovou validaci řeším částečně na úrovni DO (klasicky konstruktor), částečně validuju na úrovni DAO. Bussines validaci řeším ve vrstvě mezi tím. A snažím se tu validaci spíše nějak popisovat (anotace), abych ji mohl extrahovat a dělat duplicitní validaci do formulářů a javascriptu. 25.4.2018
  • harrison314 : overposting utok je toto https://www.hanselman.com/blog/ASPNETOverpostingMassAssignmentModelBindi... no je o tam velmi zjednuchsene, ale principalne ti mozu cez formular do databazy dostat akekolvek naviazane data, to je riziko pouzivania DO ako modelov, pre to sa tomu velmi vyhybam. 25.4.2018
  • harrison314 : takze ty anotujes domenove objekty MVC anotaciami? 25.4.2018
  • Taco : Aha. No, jestli chápu dobře ta navázaná data, tak ne, Overposting by neměl proběhnout, protože skrzeva ten formulář můžu dostat jen to, co dovolí formulář. Což může být i méně, než co umí DO. ad Anotace: spíše ten DO doplním o anotace které jsou obecnější. Například description, label, nebo nějaká závislost mezi dvěma atributy. Celé je to tak, že mi DO slouží jako zdroj pravdy. Vezmu FormBuilder a vytvořím na základě DO formulář. Vezmu PersistBuilder a vytvořím na základě DO třeba SQL pro uložení nebo načtení do/z databáze. *** Ale prezentuju tu obecný princip, jak k tomu přistupuju. V reále to stejně různě ohejbám protože není čas. 25.4.2018
  • ivoszz : Nechci do toho moc zasahovat, ale validace na straně klienta (javascript) je spíš informace pro uživatele, plná validace musí vždy proběhnout na backendu, protože formulář lze zpravidla obejít. 25.4.2018
  • harrison314 : @taco: praveze opverpostingom ti formular obidu, ak ako view model pouzijes domenovy model,nedajboze entitu tak tam mas dieru ako svet. ja uz vo vstekych svojich projektoch oddelujem view modeli od domenovych modelov, kvoli overpostingu, rozdielnym anotaciam a 90% tried je vzdy o trosku ina ako ta v domenovej logike. 25.4.2018
  • siq : Ako si tak citam tento thread, tak som normalne rad, ze v .NETe uz nepracujem. Musi to byt strasne zazivne, udrzovat niekolko verzii toho isteho modelu. 26.4.2018
  • Taco : @ivoszz: Všimni si, že píšu "a dělat duplicitní validaci do formulářů a javascriptu". Samozřejmě máš naprostou pravdu. 26.4.2018
  • Taco : @harrison314: Mě by ten formulář obejít neměli. Jiný vstup než ony formuláře tam nemám. A je dost úzký :-) Ale díky moc za upozornění, nastuduji si to. *** Formulář bejvá jiný jak DO. Ale vycházím z toho, že to bejvá podmnožina. Takže si při tom generování řeknu, kteréžeto prvky má vyhodit. Celkem to funguje. Snad :) 26.4.2018
  • harrison314 : @siq: To nie je kodenie toho isteho to je oddelenie vrstiev a princip znovupouzitelnosti. Plus tie vrstvy nemas uplne rovnake a kazda riesi inu ulohu. 26.4.2018
  • harrison314 : @Taco: asi sa dobre nechapeme, to by som musel vidiet dany kod. 26.4.2018

Pro zobrazení všech 5 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.