Hledal jsem různě po internetu, ale stále jsem nacházel informace, které jsem nepotřeboval. Proto se teď obracím sem, protože zapravé, jak se říká, víc hlav víc ví, zadruhé toto již někdo mohl hledat a úspěšně. A sice toto vlákno zakládám v sekci C/C++, ale pokud byste věděli o něčem, kde jsou příklady v jiném jazyku, je mi to docela jedno -- jsem dosti variabilní v tomto případě. A teď již, o co se to vlastně jedná? Rozhodl jsem se udělat jednu desktopovou aplikaci, tudíž s GUI. Doteď jsem žádnou větší věc tohoto typu nedělal (maximálně pár různých hello worldů atp.), a tak jsem začal hledat různé informace. Jediné, co se mi ovšem dostalo, byl opět hello world na sto a jeden způsob. Párkrát se tam také vyskytly články upozorňující na důsledné oddělení aplikační a prezenční logiky, ve kterých se ovšem nacházelo pouze, že se to tak musí dělat, ale nějaké "how-to" a/nebo ukázky postupů nikde. Dále jsem samozřejmě narazil na hromadu referenčních příruček k různým toolkitům apod., ale to pořád není, co bych potřeboval.
V knize Rapid GUI Programming with Python and Qt jsou příklady, které bych označil krásnými ukázkami míchání logik. Např. máme třídu dědící z QMainWindow (widget představující hlavní okno), která v konstruktoru obstará inicializace všech potřebných widgetů a jejich spojení s vlastními metodami, které obstarávají kupř. načítání a ukládání souboru z argumentů příkazové řádky, načítání a ukládání seznamu naposledy použitých soubor atp. Tohle se mi rozhodně nezdá. Ale chápu, že v této knize jde hlavně o vysvětlení použití Qt.
TO HLAVNÍ:
Neznáte nějaký článek, seriál, knihu či podobně, který/á by se zabýval(a) právě oddělením logik (nejlépe s nějakým příkladem (nejlépe v C++ :)))? Nebo něco, kde by se probíralo psaní aplikací pod různými toolkity (protože tam by toto oddělení mělo být samozřejmostí)? Či něco podobného spíše teoretického zaměření (nikoli referenční příručku) -- příklady aplikace MVC pattern --, kde by se o tomto psalo či mluvilo?
Fórum › C / C++
Oddělení aplikační a prezenční logiky (v C++)
Zdravím,
no, tak já pro změnu v práci dělám s MFC, což není uplně přesně MVC architektura, ale jen framewok používaící Document-View architekturu. Nciméně kdysi dávno jsem taky hledal něco obecného, bohužel nic příliš dobrého jsem nenašel. Nějakou zmíňku najdeš třeba http://www.adobe.com/devnet/actionscript/articles/ora_as3_design_patterns.html - dole je odkaz na kapitolu knížky, která se tak trochu zabývá i MVC a dále další zdroj(nevím jak seš na tom s C++ a WinAPI, ale to by nemělo vadit) je např. http://relisoft.com/win32/generic.html, moc v tom nenajdeš, ale princip se dá pochytit. Pokud bys taky něco našel, tak dej vědět.
Tak já bych doporučil přelouskat nějaký ten tutorial k MVC, většina jich bude asi pro webové stránky.
Až to budeš programovat, možná pomůže představit si to, že ke stejné funkcionalitě potom budeš ještě vedle GUI dělat rozhraní přes příkazovou řádku a přes web. S tímhle stále na mysli se ti to myslím podaří oddělit docela dobře :)
Bohužel přímo odkaz na nějaký tutorial nemám, ale v zásadě nejde o nic složitého. Tomu na co se ptáš se říká vrstvená architektura (multitier architecture). Tento přístup je založen na objektovém přístupu k programování.
Představ si, že chceš vytvořit program například pro analýzu nějakých logovacích XML souborů. První věc, kterou tento program musí zvládat je samotné čtení potřebných dat ze souborů. Proto vytvoříš třídu, která bude obstarávat všechno potřebné pro načtení dat s metodou například nactiData(), která data předá jako návratovou hodnotu. Potom bude určitě potřeba data nějak zpracovat, takže vytvoříš další třídu (říkejme jí třeba aplikační), která místo aby složitě načítala data, prostě vytvoří instanci třídy kterou sis připravil v předchozím kroku a zavolá její metodu nactiData(). Data jsou načtená velice jednoduše jedním příkazem, takže zbytek kódu se může zabývat jen jejich zpracováním, například metodou zpracujData(), která jako navratovou hodnotu bude předávat výsledek tohoto zpracování. No a na závěr je třeba samotné výsledky nějak prezentovat, napřklad formou pěkného grafu. Proto vytvoříš poslední třetí třídu (prezentační), která zajistí vytvoření okna a vykreslení pěkného grafu. Samozřejmě, aby bylo možné vykreslit graf, musíš mít k dispozici zpracovaná data. Proto vytvoříš instanci aplikační třídy a zavoláš metodu zpracujData(), tedy jediným příkazem provedeš načtení i zpracování dat. Dále už se staráš jen o to aby ten tvůj graf byl co nejhezčí a otázka nějakého zpracování souborů tě netrápí, protože to za tebe udělají nižší vrstvy programu.
A na závěr dvě velice důležité zásady. Nižší vrstva nikdy nesmí používat žádné metody vrstev vyšších. Další zásadou je opravdu striktní oddělení vrstev, tedy v každé vrstvě se vyskytuje pouze kód souvysející s jejím úkolem a účelem.
Doufám, že mi podařilo ti tuto problematiku alespoň částečně přiblížit. Víc se dozvíš například na wikipedii http://en.wikipedia.org/wiki/Multitier_architecture
To bukaj : Vím, že si nechtěl "referenční příručky", ale když už si zmínil to Qt, tak přímo na na jejich stránkách je taky popis MVC (viz doc.trolltech.com/4.4/model-view-programming.html), mě se na tom právě líbilo, že je to skutečně v kontextu (v realitě).
Opozdilec
Díky za odkaz. Ale tomuhle bych se přesně chtěl vyhnout -- vázání se k službám jednoho toolkitu.
Vím, že si můžete říct, že jsem mimo, ale toolkit bych chtěl využívat pouze a jen pro prezentaci, do modelu by se neměl míchat.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Aplikační domena — založil asd
MVC - Pridavanie logiky do ViewModels vs metoda — založil red
Aplikační server - nastaveni URL — založil NotBeginner
Oddělení konce textu — založil dragon124
Jedno nové oddělení — založil remmidemmi
Moderátoři diskuze