Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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
Honza
Člen
Avatar
Honza:16.1.2014 8:48

Ahoj, začínám dělat jednu databázovou evidenci v C# (Win Forms) a chtěl bych znát vaše názory na použití statických tříd.

Na začátku jsem si vytvořil jednu staticku třídu, kde uchovávám data která používám v celé aplikaci (informace o verzi aplikace, info o uživateli, connectionstring k databázi atd., prostě nastavení aplikace). To si myslím že je ok.

Ale pak jsem tam začal nabalovat další věci jako třeba různé číselníky načtené z databáze (funguje to tak že se číselník načte až při prvním použití a uloží se na určitou dobu do cache aby se z databáze nemusel načítat při každém použití). To jsem vyřešil tak že jsem si pro různé oblasti vytvořil klasické třídy a do statické třídy jsem přidal static property s type dané třídy.

Chtěl bych jen znát vaše názory, zda není cesta do pekel mít tolik věcí jako static, protože se drží v paměti celou dobu kde je aplikace v provozu. Zas na druhou stranu jsou to věci které používám napříč celou aplikací a kdybych vždy vytvářel novou instanci dané třídy, budu muset údaje načítat znovu z databáze.

Děkuji za názory

Odpovědět
16.1.2014 8:48
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Paradise
Tvůrce
Avatar
Paradise:16.1.2014 10:16

Pokud tam máš pár stringů, tak bych nároky na pměť moc neřešil. Přijde mi to lepší, než to třeba stále načítat ze souborů.

 
Nahoru Odpovědět
16.1.2014 10:16
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Honza
David Hartinger:16.1.2014 10:28

Pokud chceš data z DB cachovat, tak nic nevymýšlej, ale použij DataSet a odpojenou aplikaci tak, jak je to k tomu v .NETu navržené.

Co se týče toho návrhu, tak pokud ta data potřebuješ opravdu pořád a není jich moc, je to asi ok. Na devbooku podobně ukládám článek, člena a diskuzi. Pro více než pár vlastností by ses měl zamyslet nad něčím lepším, typicky se vytvoří nějaká systémová třída, která v sobě obsahuje načtené instance jako spravceFaktur, spravcePohledavek, každá instance má v sobě data, která s ní souvisejí.

Nahoru Odpovědět
16.1.2014 10:28
You are the greatest project you will ever work on.
Avatar
Honza
Člen
Avatar
Odpovídá na David Hartinger
Honza:16.1.2014 10:53

Díky za názor.

Aplikace jako taková je online, jen tam je pár (asi 10) malých číselníku (typicky do 20 záznamů) které používám napříč aplikací. Cache používám z důvodu abych je nenačítal při každém použití. Na druhou stanu je nechci nechat uplně offline, protože potřebuju aby se změna číselníku v databázi projevila u uživatele dřív než při restartu aplikce. Takže mám nastavenou expiraci v cache na 5 minut a daná třída si už řeší interně, zda načte data v databázi a nebo je najde v cache.

Nahoru Odpovědět
16.1.2014 10:53
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Honza
Kit:16.1.2014 10:54

Statika je velmi často zbytečná a vede do pekel. Značně omezuje testovatelnost aplikace, ale to si ti, kteří testy nepíší, vůbec neuvědomují.

Nahoru Odpovědět
16.1.2014 10:54
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Honza
Kit:16.1.2014 11:04

Podle mne tu cache na číselníky děláš zbytečně, protože systém si ji dělá ve vlastní režii. Nejlepší je, pokud je cache součástí databázového engine, ale už nikde jinde. Ani v objektu.

Nahoru Odpovědět
16.1.2014 11:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Honza
Člen
Avatar
Odpovídá na Kit
Honza:16.1.2014 12:05

Ono to je tak že statickou třídu mám jen jednu. Ty ostatní třídy (například ta která načítá číselníky) statická není. Ale dávám ji do statické property te jediné statické třídy.
Nicméně díky tomu že není statická není problém ji testovat i izolovaně.

Nahoru Odpovědět
16.1.2014 12:05
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Honza
Kit:16.1.2014 12:09

Problém není s testováním statické třídy, ale s testováním tříd, které jsou na statické třídě závislé. Statická třída se nedá jednoduše nahradit mockem.

Nahoru Odpovědět
16.1.2014 12:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Honza
David Hartinger:16.1.2014 14:14

Už jsem ti psal, že abys nenačítal data při každém použití, tak se používá DataSet.

Nahoru Odpovědět
16.1.2014 14:14
You are the greatest project you will ever work on.
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 9 zpráv z 9.