Sobes.tech
Middle

Jaké jsou rozdíly mezi architektonickými vzory MVC a MVP?

sobes.tech AI

Odpověď od AI

MVC (Model-View-Controller) a MVP (Model-View-Presenter) jsou dva populární architektonické vzory, které mají za cíl rozdělit aplikaci na komponenty pro zlepšení udržovatelnosti a testovatelnosti. Hlavní rozdíly spočívají v rozdělení odpovědností a v interakci mezi komponentami.

MVC (Model-View-Controller):

  • Model: Obsahuje data aplikace a obchodní logiku. Není informován o View nebo Controller.
  • View: Zobrazuje data z Modelu a zpracovává akce uživatele (například stisknutí tlačítek). View je přímo spojeno s Modelem (čerpá z něj data).
  • Controller: Působí jako prostředník mezi Modelem a View. Přijímá akce od View, aktualizuje Model a vybírá View pro zobrazení.

V MVC jsou View a Controller úzce propojeny. View může přímo přistupovat k Modelu pro data, což může ztížit testování View. Controller aktualizuje Model a Model zase informuje View o změnách (často přes KVO nebo NotificationCenter).

MVP (Model-View-Presenter):

  • Model: Podobný Modelu v MVC, obsahuje data a obchodní logiku.
  • View: Zobrazuje data a předává všechny akce uživatele Presenterovi. View je pasivní entita, která neobsahuje obchodní logiku a nepřímé komunikuje s Modelem.
  • Presenter: Působí jako kontrolér, ale s jinou odpovědností. Přijímá akce od View, komunikuje s Modelem pro aktualizaci dat a poté aktualizuje View, voláním jeho metod. Presenter zná View i Model.

V MVP je View plně oddělen od Modelu. Presenter působí jako prostředník, zpracovává logiku mezi View a Modelem. Presenter aktualizuje View, "tlačí" data k němu. To činí View více "hloupým" (dumb) a umožňuje snadnější testování Presenterů izolovaně.

Porovnávací tabulka:

Vlastnost MVC MVP
Vztah View s Modelem View může přistupovat k Modelu View nezná Model
Hlavní roli spojení Controller Presenter
Aktualizace View Model oznamuje View (Pull) Presenter aktualizuje View (Push)
"Chytrý" View Může obsahovat zobrazovací logiku Pasivní, obsahuje minimum logiky
Testování Testování View může být složitější Testování Presenter je jednodušší
Závislosti Controller závisí na View a Modelu Presenter závisí na View a Modelu

Příklad interakce (zjednodušený):

MVC:

  1. Uživatel klikne na tlačítko ve View.
  2. View oznamuje Controlleru.
  3. Controller zpracovává akci, případně aktualizuje Model.
  4. Model oznamuje View o změně dat.
  5. View aktualizuje své rozhraní, získáváním dat z Modelu.

MVP:

  1. Uživatel klikne na tlačítko ve View.
  2. View předává akci Presenterovi (například volá metodu v protokolu View).
  3. Presenter zpracovává akci, komunikuje s Modelem.
  4. Presenter získává aktualizovaná data z Modelu.
  5. Presenter aktualizuje View voláním jeho metod (například view.display(updatedData)). View jednoduše zobrazí data.