Vrstvy aplikace

Architektura aplikací

SSŠVT


Vrstvy aplikace

Každá netriviální aplikace by měla kromě své funkčnosti mít i předem definovanou vlastní architekturu. Architektura aplikace rozkládá aplikaci na části, které nějak mezi sebou interagují. Rozklad na části může být horizontální – máme vedle sebe různé funkční celky. Např.:

A dále se můžeme podívat i na vertikální rozklad appky.

Částem aplikace vzniklým "rozsekáním" appky ve vertikálním směru se říká aplikační vrstvy. Aplikace může mít jednu, dvě, tři i více vrstev. Většinou je to tak, že čím je aplikace složitější, tím větší počet vrstev má. Ale je dobré vrstvy navrhnout ještě před vlastním kódováním, protože se často stává, že na první pohled jednoduchá appka se postupně rozroste do úctyhodných rozměrů s mnoha tisíci řádků kódu a desítkami nebo i stovkami souborů. Pokud měl vývojář nebo vývojový tým architekturu aplikace na zřeteli od samého začátku vývoje, je to moc dobře. Do již hotové velké aplikace se architektura dodatečně "injektuje" jen velmi těžko.

My se budeme ve většině našich aplikací (ať už konzolových, GUI s formuláři nebo webových) snažit držet tyto vrstvy:

Application Architecture

Začneme-li odspoda, pak databáze je vrstva tzv. persistence dat, tj. potřebujeme ji proto, aby nám data "nezmizela" potom, co appku zavřeme. Aby data přetrvala mezi jednotlivými spuštěními naší aplikace.

Vrstva ORM (objektově-relačního mapování) je místo, kde dochází ke konverzím relačních dat, která přicházejí z databáze, na objektová data, s nimiž pracují vyšší vrstvy appky. Konverze probíhají i opačným směrem, tj. když např. uživatel ukládá nový záznam do databáze, tak se do ORM vrstvy dostane objekt s daty, která uživatel zadal, a vrstva ORM zařídí, že se z objektu stane nějaký SQL dotaz (např. INSERT), který data v relační databázi uloží (persistuje). V .NETu se pro ORM nejčastěji používá Entity Framework.

Datová vrstva poskytuje tzv. API (aplikační programové rozhraní) pro vyšší vrstvy. Umožňuje vrstvám nad sebou, aby se jim dobře pracovalo s daty z databáze (již v business objektech). Vystavuje tedy sadu metod, které realizují nejčastější operace s daty, jako je vytvoření záznamu, načtení záznamu, aktualizace záznamu nebo smazání záznamu (tzv. CRUD = CREATE, READ, UPDATE, DELETE).

V datové vrstvě máme repository objekty (repo-třídy). Nejčastěji je to tak, že ke každému business objektu implementujeme jeho vlastní repo-třídu.

Mezi datovou a prezentační vrstvou bývá ještě aplikační vrstva (vrstva servisních tříd), která:

Aby uživatel mohl s aplikací interagovat, nabízíme mu většinou uživatelské rozhraní. Rozhraní na příkazové řádce se označuje CUI (Console User Interface) nebo CLI (Command Line Interface), grafické rozhraní má zkratku GUI (Graphical User Interface). V GUI máme většinou nějaká okna s formuláři nebo webové stránky. Vrstva aplikace, která realizuje uživatelské rozhraní, se nazývá prezentační vrstva, protože především uživateli prezentuje data, která dostane z nižších aplikačních vrstev.

Zda budovat naši appku odspoda nahoru, tj. začít databází, přidat ORM vrstvu, pak datovou vrstvu atd., anebo naopak začít odshora prezentační vrstvou, pod ní udělat aplikační vrstvu a dojít až dolů k databázi, je na zvážení vývojáře. Přirozenější je asi napřed udělat nějaké uživatelské rozhraní, přitom přijdeme na to, jaké potřebujeme servisy, ty nám určí, jak vybudovat datovou vrstvu atd. Z hlediska závislostí je však jednodušší začít odspoda, od databáze.

Na co bychom však nikdy neměli zapomenout a co bychom měli vždy udělat jako úplně první, je datový model, tj. nejprve si nakreslit (aspoň základní) business objekty a vztahy mezi nimi.