IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:12.9.2017 15:25

Ahoj, řeším pár nejasností ohledně "správné" implementace MVVM společně s Entity Frameworkem. Nad EF si postavím Repository Pattern a Unit Of Work. Odstíním si tím konkrétní ORM framework a půjde to i snadněji testovat.

Co mi nejde do hlavy, jak naložit s třídami entit. Dejme tomu, že chci udělat formulář, kde vyplním informace (případně změním) o účastnících. Tj entia účastník (jméno, věk, bydliště,...).

Je správně ve ViewModelu skrz repository si načíst data a ty přímo bindovat? Anebo ve ViewModelu vytvořit property, které se budou vázat na View a po vyvolání nějakého Command z vyplněných property sestrojit entitu (případně opět načíst, změnit hodnoty) a poslat do repozitáře?

Mám v tom trochu hokej, díky za vyjasnění ;)

Odpovědět
12.9.2017 15:25
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:12.9.2017 15:30

Četl jsi místní E-shop v ASP.NET? Tam se používá tuším AutoMapper.

Nahoru Odpovědět
12.9.2017 15:30
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:12.9.2017 15:37

Nad něčem podobném jsem přemýšlel, ale nějak nevidím výhodu v tom, 1:1 překlápět Entity třídy na ViewModel. V čem je výhoda?

Nahoru Odpovědět
12.9.2017 15:37
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:12.9.2017 15:42

Podstatou ViewModelu je IMHO to, že to není plnohodnotná entita, ale co nejmenší pomocná třída. I když mi to přijde také podivné, podle Best practices se to tak dělá. Výhodou je, že ViewModel nemusí kopírovat rozhraní entity.

Nahoru Odpovědět
12.9.2017 15:42
New kid back on the block with a R.I.P
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Jan Vargovský:12.9.2017 17:21

Na AutoMapper se vykašli. Na začátku jsem ho měl rád a usnadnil ti práci, jakmile ale pak něco zrefaktoruješ, tak už ti to přestane mapovat property a musíš to stejně setupovat sám (a dost blbě se to debuguje ...). Jakmile pak máš nějaké vnořené mapování, tak to taky není žádná sláva, osobně jsem si zvykl pro mapování z objektu -> objekt (třeba Model na DTO, Model na ViewModel ... záleží jak si to pojmenuješ) napsat metodu sám.

Výhodu poznáš jakmile nebudeš dělat základní CRUD, ale budeš mít komplexnější scénáře. Tyhle otázky by ti měla objasnit třívrstvá architektura.

Osobně dělám POCO na každé vrstvě zvlášť a snažím se si nepřenášet závislosti tam kde nemusím. Na fakt jednoduchých věcech je to asi jedno, ale jakmile děláš něco většího, tak tě to při každé další změně potrestá.

 
Nahoru Odpovědět
12.9.2017 17:21
Avatar
Odpovídá na Petr Nymsa
Marian Benčat:12.9.2017 17:52

Buďto je tu poslouchej a uděláš anemický model, kde absolutně nemáš žádný doménový model (to je právě to POCO - tam je na každé vrstvě jedna přepravka, mapuje se to mezi sebou a samotná logika je v přepravkách - je to více ale imperativní programování než objektové)... nebo je neposlouchej, udělej plný doménový model, ale pak se vykašli na věci jako UOW a repository, protože něco takového nemůže dohromady fungovat...

Mluvím o tom částečně i zde:
https://www.youtube.com/watch?…

Nesnažte se bože za každou cenu skloubit dva absolutně opačné přístupy, stejně vam z toho vyjde jen kočkopes.

Editováno 12.9.2017 17:52
Nahoru Odpovědět
12.9.2017 17:52
Totalitní admini..
Avatar
Marian Benčat:12.9.2017 17:55

Samotný EF není ani pro plný OOP přístup a rich domain model stavěný...více zde:

https://blog.inf.ed.ac.uk/…olid-design/
https://vaughnvernon.co/?…

A HLAVNE!!!!:
https://lostechies.com/…k-scorecard/

Nahoru Odpovědět
12.9.2017 17:55
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Marian Benčat:12.9.2017 18:04

pardon oprava textu (toto forum z nejakeho nadpozemskeho duvodu nedovoluje editovat, takže mi nezbývá než spamovat). "Samotná logika je v servisách" u anemického modelu.

Nahoru Odpovědět
12.9.2017 18:04
Totalitní admini..
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:12.9.2017 20:05

Marian Benčat Jan Vargovský díky za odpovědi. Asi se mám co učit. Jde o to, že tu máme větší projekt, který se rozšiřoval bez nějaké "architektury" a momentálně to dost hoří a celé se to sype -> bude se to přepisovat. Proto máme volné ruce a možnost to celé nastavit nějak rozumně. Chceme to udržet tak jednoduché jak jen to půjde, ale nějak rozumně navrhnuté.

Jedná se o WPF aplikaci, potřeba jsou typické úkony a práce s daty z databáze.
Pokud máte jště nějaké tipy co nastudovat kolem toho, budu rád. Díky.

Nahoru Odpovědět
12.9.2017 20:05
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Marian Benčat
Jan Vargovský:12.9.2017 20:57

... samotná logika je v přepravkách ...

O tom ale přece nikdo nemluvil :) když řeknu DTO jako POCO, tak tam do toho neseru přece žádnou logiku :D od toho mám tu vrstvu nebo další servisy.

 
Nahoru Odpovědět
12.9.2017 20:57
Avatar
Odpovídá na Jan Vargovský
Marian Benčat:12.9.2017 20:58

A četl si co jsem napsal hned pod tím??
"pardon oprava textu (toto forum z nejakeho nadpozemskeho duvodu nedovoluje editovat, takže mi nezbývá než spamovat). "Samotná logika je v servisách" u anemického modelu."

Nahoru Odpovědět
12.9.2017 20:58
Totalitní admini..
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Marian Benčat
Jan Vargovský:12.9.2017 21:04

Nečetl obviously ... Máš nějaké příklady toho anemického modelu? Nějak nevidím co je blbě na tom, že máš logiku vyseparovanou někde jinde a pro přepravu dat mezi vrstvy používáš DTO.

 
Nahoru Odpovědět
12.9.2017 21:04
Avatar
Odpovídá na Jan Vargovský
Marian Benčat:12.9.2017 21:10

je to v tom jednom odkazu.. v zásadě na anemickém modelu není špatně nic,.. ale není to OOP a stím jsou spojené jeho nevýhody i výhody.

Nahoru Odpovědět
12.9.2017 21:10
Totalitní admini..
Avatar
Marian Benčat:12.9.2017 21:12

Popravde se do teto debaty nechci poustet, protoze 1) toto je strašné forum a nechci každý debilní přepis řešit pomocí 10 dalších příspěvků... 2) je to tak na 2 hodky to probrat u piva

Nahoru Odpovědět
12.9.2017 21:12
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.