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í.

Diskuze: Jádro aplikace + UI/GUI

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
johny
Neregistrovaný
Avatar
johny:5.11.2012 19:26

Dobrý den, potřeboval bych poradit s aplikací. Mám (Visual Studio) solution Aplikace, v ní dva projekty - Jádro a UI, v budoucnu přidám GUI. Snažím se během psaní oddělit UI od jádra, ale nevím, jestli to dělám správně. Je postup, že UI nástavba využívá metody tříd a vnořených tříd Jádra (např. Jadro.PoleCisel­.VypisSerazene()) správný? Jádro je statická třída. Nebo by bylo správnější to psát jinak? Díky za radu.

 
Odpovědět
5.11.2012 19:26
Avatar
Odpovídá na
Drahomír Hanák:5.11.2012 20:25

Přesně tenhle problém řeší MVC (Model View Controller). Je to architektura kódu, která ti rozdělí aplikaci do třech vrstev (Model - business logika, View - UI atd., Controller - obsluhuje různé události, je to takový prostředník mezi View a modelem). Víc najdeš v tomhle článku: http://www.itnetwork.cz/…avrhovy-vzor Co se C# týče, tak na tohle se celkem hodí WPF, které je implementováno jako MVVM, což je (jednodušší) odvozenina od MVC. Rozděluje ti View (XAML - UI aplikace) od obsluhování jednotlivých komponent a logiky ve tvé aplikaci.

Btw. statika je celkem zlo, když nevíš, kde a jak ji implementovat.

Editováno 5.11.2012 20:28
 
Nahoru Odpovědět
5.11.2012 20:25
Avatar
Doupak
Člen
Avatar
Odpovídá na
Doupak:5.11.2012 20:57

Souhlasím s Drahosem, jadro urcite udelej jako klasickou tridu.

 
Nahoru Odpovědět
5.11.2012 20:57
Avatar
johny
Neregistrovaný
Avatar
Odpovídá na Drahomír Hanák
johny:5.11.2012 21:12

Supr, to je přesně ono, díky. A s tou statikou - jádro aplikace jako takové si myslím statiku "zaslouží". Jednak bude vždy jen jedno, takže vytvářet instanci mi přišlo míň logické, než jej mít staticky. Ale hlubší význam to momentálně nemá. Ve chvíli kdy přístup z toho, že při implementaci UI používám hloubkově metody jádra, změním na model, kdy UI bude zasílat "jednoduché" zprávy jádru přes controller a nebude šahat do jádra, tak je statická třída, dle mého, vhodná a neškodná.

 
Nahoru Odpovědět
5.11.2012 21:12
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:5.11.2012 21:21

Používání statických tříd mi vždy smrdí Singletonem, což je antipattern, který by se neměl používat.

Nahoru Odpovědět
5.11.2012 21:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na
Drahomír Hanák:5.11.2012 21:21

Nepřijde mi to jako vhodné řešení. Na takové předávání závislostí se používá Dependency Injection http://www.itnetwork.cz/…avrhovy-vzor Nemusíš pak řešit, odkud si tu závislost předáš, o to se postará někdo jiný. Když pak potřebuješ tu instanci vytvořit jinak (případně použít jinou instanci, jinou implementaci rozhraní), změníš to jen v DI kontejneru a změna se projeví všude v aplikaci, což u statického přístupu může být problém. Nehledě na to, že statika (v tomhle případě) nemá daleko od globálních proměnných a funkcí. Jsou jen zasazeny do nějakého kontextu.

 
Nahoru Odpovědět
5.11.2012 21:21
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:6.11.2012 12:47

Také zastávám názor, že statika v rozumné míře neškodí a když to má někde smysl, nebojím se ji použít. Tu systémovou třídu máme zde na devbooku napsanou podobně. Pokud začínáš s MVC, je to naprosto v pořádku. Nicméně pokud chceš být profík, tak se řiď radami Drahomír Hanáke, DI je určitě mnohem elegantnější řešení.

Nahoru Odpovědět
6.11.2012 12:47
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Drahomír Hanák:6.11.2012 13:09

Statika je někdy dost užitečná. Používám ji na statické Utility, které mi shrnují práci s nějakými hodnotami (např. řetězci v kódování UTF-8), na Simple Factory methods a další. Se statikou pracuje celkem dost idiomů a návrhových vzorů. Pro menší projekty se dá určitě použít systémová třída, ale na větších projekty a projekty, které se mohou časem rozrůstat (což je mimochodem většina aplikací, protože klient většinou neví, co chce) se moc nehodí.

 
Nahoru Odpovědět
6.11.2012 13:09
Avatar
johny
Neregistrovaný
Avatar
johny:6.11.2012 17:39

Vzhledem k tomu, že MVC a DI jsou pro mě nyní relativně nové pojmy, tak se samozřejmě na začátku budu řídit radami. Tu statiku ještě důkladně zvážím, každopádně za ostatní rady velké díky.

 
Nahoru Odpovědět
6.11.2012 17:39
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:6.11.2012 18:08

Si udělej nejdříve MVC se statikou a potom DI, ať se neučíš 2 věci najednou :) Je jen důležité, abys věděl, že to není stoprocentní řešení a že to někdy ještě vylepšíš.

Nahoru Odpovědět
6.11.2012 18:08
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:6.11.2012 21:10

Osobně jsem spíš pro to, aby nejprve zkusil DI, protože to použije skutečně všude. Vyhne se tak potřebě statických tříd, které silně svádí k tomu, aby se používaly jako náhražky globálních proměnných. Také tím zruší potřebu některých antipatternů, jako např. Singletonu.

MVC se na všechno nehodí a navíc je spousta různých názorů, jak má MVC vypadat.

Nahoru Odpovědět
6.11.2012 21:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Drahomír Hanák:6.11.2012 21:32

To je pravda :) Dva vývojáři, kteří vyvíjí různé MVC aplikace v různých jazycích mohou mít na něco rozdílné názory. U těch podstatnějších věcí je dobré se řídit někým nezávislým (např. Martin Fowler http://martinfowler.com/) Podle mě by se to mělo brát trošku s nadsázkou. Moc o tom nediskutovat a hlavně nelpět na detailech, protože to přináší zmatek, a začátečníkům by to mohlo dělat celkem potíže. Samozřejmě, jak jsi říkal, MVC se nemusí vždy vyplatit. Nicméně pokud chce dělat nějakou desktopovou aplikaci, bylo by dobré ho použít.

Jinak k tomu singletonu - může být i bez statiky. Třeba v DI kontejneru singleton celkem připomínají servisy, které mají taky jen jednu instanci pro celou aplikaci (pokud se správně dodržuje DI).

Editováno 6.11.2012 21:35
 
Nahoru Odpovědět
6.11.2012 21:32
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:6.11.2012 21:50

Přesně takovou náhradu Singletonu jsem měl na mysli. Navíc se tím elegantně vyřeší působnost např. přihlašovacích údajů k databázi. Není nutné je mít jako globální konstanty přes celou aplikaci.

Jen je dobré to spojit s línou inicializací, protože databáze (nebo jiná instance čehokoli, třeba modelu) nemusí být vždy potřebná.

Nahoru Odpovědět
6.11.2012 21:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 13 zpráv z 13.