Monolitická architektura
-
Definice: Celá aplikace funguje jako jeden nedělitelný celek. Veškerá funkcionalita (uživatelské rozhraní, logika, práce s daty) je v jednom projektu a nasazuje se na server najednou.
-
V Pythonu: Představ si to jako Django nebo Flask aplikaci, kde máš všechen kód v jedné složce a spouštíš to všechno najednou (např.
python manage.py runserver).
Maintainability (Udržitelnost):
-
❌ Riziko pádu: Chyba v jednom modulu (např. košík) může shodit celou aplikaci, protože sdílí stejné zdroje a paměť.
-
❌ Nepřehlednost: Jak kód roste (“spaghetti code”), je těžké se v něm vyznat a opravovat chyby bez toho, aby se rozbilo něco jiného.
Scalability (Škálovatelnost):
- ❌ Neefektivní: Nelze škálovat jednotlivé komponenty (např. jen košík). Musíš nasadit celou aplikaci znovu na silnější server (vertikální škálování) nebo spustit kopie celé aplikace (horizontální škálování), což vede k plýtvání zdroji (zbytečně posiluješ i málo využívané části).
Reusability (Znovupoužitelnost):
- ❌ Nízká: Komponenty jsou na sobě závislé. Nelze jednoduše vzít kus kódu (např. výpočet DPH) a použít ho jinde, protože je „přilepený“ k dalším částem aplikace.
Collaborative (Spolupráce v týmu):
- ❌ Obtížná: Vysoké riziko konfliktů při slučování kódu (merge conflicts). Nováčci se v obřím kódu dlouho orientují, protože musí pochopit skoro celou aplikaci, aby něco nerozbili.
Bugs preventing (Předcházení chybám):
-
❌ Nízká: Vysoké riziko vedlejších efektů. Oprava jedné chyby může nečekaně rozbít jinou funkčnost kvůli silné provázanosti kódu. Testování je náročné, protože musíš často otestovat celou aplikaci.
Three tier architektura
Teď tu naši aplikaci “rozřízneme” na tři samostatná patra (vrstvy), která spolu komunikují, ale jsou oddělená:
-
Prezentační vrstva (Presentation): To, co vidí uživatel (Frontend, HTML stránky).
-
Aplikační logika (Business Logic): Mozek aplikace, výpočty, pravidla (tady žije většina tvého Python kódu).
-
Datová vrstva (Data): Ukládání dat (Databáze, SQL).
Reusability (Znovupoužitelnost):
- ✅ Vysoká: Logika (Business Logic) je oddělená od toho, jak se data zobrazují (Presentation). Můžeš ji snadno použít pro web, mobilní aplikaci nebo třeba desktopovou aplikaci, aniž bys musel přepisovat kód.
Scalability (Škálovatelnost):
- ✅ Vysoká: Každá vrstva může běžet na vlastním serveru. Pokud nestíhá databáze, posílíš jen databázový server, zbytek necháš tak. Umožňuje to flexibilní růst.
Maintainability (Udržitelnost):
- ✅ Vysoká: Změny v jedné vrstvě (např. design webu) neovlivňují ostatní vrstvy (logiku nebo databázi). Kód je přehlednější a lépe se spravuje.
Collaborative (Spolupráce v týmu)
- ✅ Dobrá: Umožňuje specializaci týmů. Frontend vývojáři mohou pracovat na prezentační vrstvě (React, Angular) a Backend vývojáři na logice a datech (Python, SQL) nezávisle na sobě. Nemusí “umět všechno” jako u monolitu.
Bugs preventing (Předcházení chybám)
-
✅ Bezpečnější: Izolace chyb. Pokud nastane chyba v prezentační vrstvě (např. chyba v JavaScriptu v prohlížeči), nezhroutí se kvůli tomu serverová část (Backend) ani databáze. Aplikace je robustnější.
MVC architektura
-
Model: Data a logika (v Pythonu tvé třídy, komunikace s databází).
-
View (Pohled): To, co uživatel vidí (výstup, HTML šablona).
-
Controller (Řadič): “Dopravní policista”, který řídí provoz. Přijímá pokyny od uživatele a rozhoduje, co se stane.
Collaborative (Spolupráce v týmu):
- ✅ Výborná: Umožňuje paralelní vývoj. Designéři řeší šablony (View), programátoři logiku (Model/Controller) a nelezou si do zelí.
Reusability (Znovupoužitelnost):
- ✅ Vysoká: Stejný Model (data/logika) můžeš použít pro různá Views (webová stránka, PDF export, JSON pro mobilní aplikaci).
Maintainability (Udržitelnost):
- ✅ Vysoká: Kód je čistý a organizovaný. Oprava chyby v zobrazení (překlep v HTML) neohrozí výpočty v Modelu.
Scalability (Škálovatelnost):
- ✅ Dobrá: Podporuje modularitu kódu. Aplikace se snáze rozšiřuje o nové funkce (např. přidání nového View pro adminy) bez zásahu do jádra systému.
Bugs preventing (Předcházení chybám):
- ✅ Vysoká: Díky oddělení vrstev se aplikace skvěle testuje. Můžeš psát automatické testy pro Model (logiku) úplně odděleně od toho, jak vypadá web.
Hlavní rozdíl: Three-Tier vs. MVC
Tohle je klíčové pro test, aby se ti to nepletlo:
-
Three-Tier (Třívrstvá architektura): Řeší fyzické rozdělení systému.
- Jde o to, kde kód běží (např. databáze na jednom serveru, Python logika na druhém, HTML v prohlížeči uživatele).
-
MVC (Model-View-Controller): Řeší logické uspořádání kódu.
-
Jde o to, jak je kód napsaný uvnitř jedné aplikace (návrhový vzor), aby v tom nebyl nepořádek (oddělení dat, vzhledu a řízení).
-
Shrnutí
| Kritérium | 1. Monolitická (Monolith) 🧱 | 2. Třívrstvá (Three-Tier) 🍰 | 3. MVC (Model-View-Controller) 🚦 |
| Princip | Vše v jednom (jeden kód, jeden proces). | Fyzické rozdělení na 3 servery/vrstvy (Prezentace, Logika, Data). | Logické rozdělení kódu uvnitř aplikace (Data, Vzhled, Řízení). |
| Maintainability (Udržitelnost) | ❌ Nízká: “Špagetový kód”, chyba může shodit vše. | ✅ Vysoká: Změna v jedné vrstvě neohrozí ostatní. | ✅ Vysoká: Čistý kód, oddělené zodpovědnosti. |
| Scalability (Škálovatelnost) | ❌ Špatná: Musíš škálovat celou aplikaci, i když je vytížená jen část. | ✅ Vysoká: Můžeš posílit jen ten server, který nestíhá (např. DB). | ✅ Dobrá: Podporuje modularitu a rozšiřování funkcí. |
| Reusability (Znovupoužitelnost) | ❌ Nízká: Kód je silně provázaný, těžko se “vykrajují” části. | ✅ Vysoká: Logiku můžeš použít pro web, mobil i desktop. | ✅ Vysoká: Jeden Model (data) pro různé Views (pohledy). |
| Collaborative (Spolupráce) | ❌ Obtížná: Konflikty při slučování, všichni dělají na všem. | ✅ Dobrá: Specializované týmy (Frontend vs. Backend). | ✅ Výborná: Designér řeší View, programátor Model/Controller. |
| Bugs preventing (Předcházení chybám) | ❌ Riziková: Oprava jedné chyby často rozbije něco jiného (regrese). | ✅ Bezpečnější: Chyba na frontendu neshodí backend/databázi. | ✅ Bezpečnější: Snadné testování jednotlivých částí (Unit testy). |