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.

Neregistrovaný

Zobrazeno 13 zpráv z 13.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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á.
Používání statických tříd mi vždy smrdí Singletonem, což je antipattern, který by se neměl používat.
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.
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í.
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í.
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šíš.
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.
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).
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á.
Zobrazeno 13 zpráv z 13.