Avatar
gcx11
Redaktor
Avatar
gcx11:21.7.2016 15:33

Ahoj,
četl jsem, že by měly být konstruktory v C# převážně líné. Má to nějaké reálné výhody a jak často by se to mělo používat? Přijde mi, že to vyžaduje kód navíc, pokud nepoužiji cukr ze C# 4 a může to urychlit start aplikace, ale víc mě nenapadá.

 
Odpovědět 21.7.2016 15:33
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:21.7.2016 15:35

co je líný constructor? Myslíš Side effect? :-)

Nahoru Odpovědět 21.7.2016 15:35
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Marian Benčat
gcx11:21.7.2016 15:43

Že se atributy objektu dopočítají, až když je potřebuješ.

 
Nahoru Odpovědět 21.7.2016 15:43
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:21.7.2016 16:00

aha.. lazy init / lazy loading (treba Lazy<>):-) To se používá poměrně často.. obzvláště pokud tvorba objektu trvá třeba dlouho, nebo je náročné na zdroje.. obzvlaste, kdyz to třeba většinou nepotřebuješ...

typickým příkladem je DBContext u ASP. Často nepotřebuješ přístup do DB, ale je součástí (ať už přímo, nebo nepřímo přes repozitáře) controlleru.. takže se ti vytvoří pokaždé.. přesto, že databázi potřebuješ třeba jen u 1 akce z těch 30ti co u controlleru máš.

Editováno 21.7.2016 16:00
Nahoru Odpovědět 21.7.2016 16:00
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Marian Benčat
gcx11:21.7.2016 16:41

To chápu, ale přemýšlím, jestli je rozumné to tak dělat pro každou třídu.
BTW můžeš někdy zkusit tlačítko odpovědět, uživatelům se to pak i zobrazí, že jsi jim odpověděl ;)

 
Nahoru Odpovědět 21.7.2016 16:41
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na gcx11
Marian Benčat:21.7.2016 17:15

většinou to dělám, jen bych čekal, že se to uživateli zobrazí při jakékoliv reakci, ostatně,.. jako to dělá facebook.. Tedy jsem si to myslel.. proto mi to odpovědět přišlo k ničemu, protože to tu stejně na hovno hajlajtuje ;-)

Každopádně.. u většiny použití Lazy<> porušuje Law of Demeter a když to chceš nějak fixnout, tak to vede většinou k větší práci navíc..

Obecně, takovéto optimalizace nejsou úplně "first run".. když implementuješ, takovéto věci prostě neřešíš.. celkově neimplementuješ prostě tak, aby bylo vše co nejefektivnější.. spíše jedeš, aby to bylo "normálně výkonné" a pak detekuješ určité hotspoty a bottlenecky a tam opravuješ.

Je tedy zcela jistě hloupost přesypat kód lazy inicializací.. má to taky svoji režii a má smysl to řešit dodatečně. Ne prvoplánově.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 21.7.2016 17:15
"C# 3.0 (2007) volal Java 8 (2014), že chce svoje featury zpět"
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Marian Benčat
gcx11:21.7.2016 17:24

Ano, zobrazí se mi to, ale to je proto, že je to moje vlákno, pokud bych to vlákno nevlastnil, tak se o odpovědi nedozvím. Díky za reakci :)

 
Nahoru Odpovědět 21.7.2016 17:24
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 7 zpráv z 7.