NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
marek.lubos
Člen
Avatar
marek.lubos:27.7.2017 13:27

Dobrý den,
rád bych se zeptal místních zkušenějších, jak je v porovnání náročný objekt typu ExpandoObject s "normálním" objektem (třídou)?

Samořezjmě myslím jeho použití v rozumné míře ..... Je nějak výrazně náročnější, nebo je to srovnatelné?
Oblíbil jsem si jeho použití ve spojitosti Serializovat tento objekt do JSON a tím pádem je pro mě objekt daleko univerzálnější, než kdyby byl typovaný ....

dynamic obj = new System.Dynamic.ExpandoObject()

Předem děkuji

Editováno 27.7.2017 13:27
 
Odpovědět
27.7.2017 13:27
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na marek.lubos
Jan Vargovský:27.7.2017 13:44

Si udělej benchmark ...

Btw, jestli to je známý JSON, tak je to jen totální lenost dát copy paste a vytvořit z toho classu a normálně typový objekt.

Editováno 27.7.2017 13:44
 
Nahoru Odpovědět
27.7.2017 13:44
Avatar
marek.lubos
Člen
Avatar
marek.lubos:27.7.2017 13:58

Jako víceméně ano, spíš se nejedná o lenost, spíš o vyvarování se mít mnoho a mnoho tříd a tím třeba i ztratit i přehlednost, proto když právě do JSON potřebuju vrátit objekt, jehož struktura už se nikde jinde nepoužívá se mně zdá zbytečné právě vytvářet třídu .....

 
Nahoru Odpovědět
27.7.2017 13:58
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na marek.lubos
Jan Vargovský:27.7.2017 14:20

zato mít v kódu randomObject.Ran­domProperty1.Ran­domProperty11 je přehlednější :D
až to nebude projekt, resp. část kódu na kterou často koukáš a přijdeš k ní po pár měsících/letech, tak se budeš bít do hlavy co to znamená :)

Editováno 27.7.2017 14:21
 
Nahoru Odpovědět
27.7.2017 14:20
Avatar
Odpovídá na marek.lubos
Marian Benčat:27.7.2017 19:58

Naprostý souhlas, nedělejte z rozumného jazyka dynamický odpad jen proto, že má pro to podporu (dynamic, DLR, ExpandoObject a podobný sra*ky) vznikly především kvůli podpoře dalších nových jazyků pro .NET (například python) a né proto, aby se zneužívaly.

Někde je použití vhodné a je to prima (přenos modelu do template třeba v MVCčku), ale rozhodně by se to nemělo zneužívat. Dynamika je ZLO.

Pokud můžeš - šáhni raději po anonymním objektu, tuple,..

Dynamic je o hodně (hodně) pomalejší než static typing, na druhou stranu, je mnohem (mnohem) rychlejší, než třeba reflexe (pokud to není nahackovaná reflexe pomocí úpravy IL kodu.), jelikož je použití dynamicu obaleno zvláštním runtimem (DLR) a ten to umí pak obzvláště při dalším runu slušně obalit...

Co to znamená?

  1. Nepoužívej dynamic pokud nemusíš
  2. Pokud se pomocí dynamic jsi schopný vyhnout reflekci a víš co děláš, použij spíše dynamic.
Editováno 27.7.2017 19:58
Nahoru Odpovědět
27.7.2017 19:58
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 5 zpráv z 5.