Architektura MVC

ASP.NET MVC

SSŠVT


Architektura

Ve webových aplikacích se často používá návrhový vzor MVC, tj. Model-View-Controller.

Nejprve obecné schéma webové aplikace (ať už používá MVC, či nikoliv):

application layers

Prezentační vrstva (presentation layer) je nejvyšší vrstva aplikace. Je to vrstva, se kterou přímo interaguje uživatel neboli klient (jeho browser) přes HTTP protokol. Prezentační vrstva přijímá požadavky (HTTP request) od uživatele a směruje je do nižších vrstev aplikace. A přebírá data z nižších vrstev aplikace, renderuje je do HTML a odesílá je jako HTTP response zpět uživateli, čili na klienta.

Aplikační vrstva neboli vrstva obchodní logiky (business logic), někdy též servisní vrstva, přebere požadavek od prezentační vrstvy, zanalyzuje ho a přeformuluje ho do složitějších dotazů do databáze. Dotazy posílá datové vrstvě. Jakmile aplikační vrstva dostane odpovědi (typicky nějaká data), poskládá je do objektů, se kterými může pracovat prezentační vrstva a pošle je v této podobě jako návratovou hodnotu prezentační vrstvě.

Datová vrstva neboli DAO (data access object), někdy též repo vrstva, realizuje přímé dotazy do databáze. V moderních aplikacích je mezi datovou vrstvou a databází ještě "mezivrstva", která převádí objektová data na SQL dotazy a výsledky SQL dotazů zpět na objekty. Této "mezivrstvě" se říká ORM, čili objektově-relační mapování. Mapuje data objektů v aplikaci na relační data v databázi a naopak relační data zpátky na objekty.

Když se v aplikaci rozhodneme použít návrhový vzor MVC, tak vlastně definujeme detailněji nejvyšší vrstvu výše zmíněné architektury, jinými slovy navrhujeme její prezentační vrstvu.

MVC on Wikipedia

V návrhovém vzoru MVC jsou jednotlivé odpovědnosti rozděleny na tři části:

Jak to bylo myšleno původně (Smalltalk-80):

MVC in Smalltalk

Ve Smalltalku si architekti představovali, že uživatel se může na data (model) dívat zároveň jako na tabulku (view #1), zároveň jako na sloupcový graf (view #2) a zároveň jako na koláčový graf (view #3). Uživatel pak může na některé z view kliknout a třeba tam něco napsat, protože chce data upravit (např. v té tabulce). Data se následně zapíší do modelu a model zajistí, že se všechna view patřičným způsobem aktualizují. Veškerou komunikaci mezi všemi view a modelem zajišťuje controller (zpracovává události od uživatele, odesílá aktualizační pokyny pro views).

Jak to vypadá v moderní webové aplikaci, je vidět např. na takovémto obrázku:

MVC from interview

Webová aplikace s vícero views a vícero controllery (a jediným modelem, tj. daty) může z hlediska architektury vypadat např. takto:

MVC with mutliple views and controllers