Sobes.tech
Middle

Aké sú rozdiely medzi architektonickými vzormi MVC a MVP?

sobes.tech AI

Odpoveď od AI

MVC (Model-View-Controller) a MVP (Model-View-Presenter) sú dva populárne architektonické vzory, ktoré majú za cieľ rozdeliť aplikáciu na komponenty na zlepšenie udržiavateľnosti a testovateľnosti. Hlavné rozdiely spočívajú v rozložení zodpovedností a v interakcii medzi komponentami.

MVC (Model-View-Controller):

  • Model: Obsahuje údaje aplikácie a obchodnú logiku. Nie je informovaný o View alebo Controller.
  • View: Zobrazuje údaje z Modelu a spracováva akcie používateľa (napríklad stlačenia tlačidiel). View je priamo spojené s Modelom (ťahá údaje z neho).
  • Controller: Pôsobí ako sprostredkovateľ medzi Modelom a View. Prijíma akcie od View, aktualizuje Model a vyberá View na zobrazenie.

V MVC sú View a Controller úzko prepojené. View môže priamo pristupovať k Modelu pre údaje, čo môže sťažiť testovanie View. Controller aktualizuje Model a Model informuje View o zmenách (často cez KVO alebo NotificationCenter).

MVP (Model-View-Presenter):

  • Model: Podobný Modelu v MVC, obsahuje údaje a obchodnú logiku.
  • View: Zobrazuje údaje a prenáša všetky akcie používateľa Presenterovi. View je pasívna entita, ktorá neobsahuje obchodnú logiku a neinteraguje priamo s Modelom.
  • Presenter: Pôsobí ako kontrolór, ale s inou zodpovednosťou. Prijíma akcie od View, interaguje s Modelom na aktualizáciu údajov a potom aktualizuje View, volaním jeho metód. Presenter pozná View a Model.

V MVP je View úplne oddelený od Modelu. Presenter pôsobí ako sprostredkovateľ, spracováva logiku medzi View a Modelom. Presenter aktualizuje View, "tlačí" údaje k nemu. To robí View viac "hlúpe" (dumb) a uľahčuje testovanie Presenterov izolovane.

Porovnávacia tabuľka:

Vlastnosť MVC MVP
Vzťah View s Modelom View môže pristupovať k Modelu View nepozná Model
Hlavná rola prepojenia Controller Presenter
Aktualizácia View Model oznamuje View (Pull) Presenter aktualizuje View (Push)
"Inteligentnosť" View Môže obsahovať logiku zobrazenia Pasívny, obsahuje minimum logiky
Testovanie Testovanie View môže byť zložitejšie Testovanie Presenter je jednoduchšie
Závislosti Controller závisí od View a Modelu Presenter závisí od View a Modelu

Príklad interakcie (zjednodušené):

MVC:

  1. Používateľ stlačí tlačidlo vo View.
  2. View oznamuje Controller.
  3. Controller spracováva akciu, prípadne aktualizuje Model.
  4. Model oznamuje View o zmene údajov.
  5. View aktualizuje svoje rozhranie, získavajúc údaje z Modelu.

MVP:

  1. Používateľ stlačí tlačidlo vo View.
  2. View prenáša akciu Presenterovi (napríklad volá metódu v protokole View).
  3. Presenter spracováva akciu, interaguje s Modelom.
  4. Presenter dostáva aktualizované údaje z Modelu.
  5. Presenter aktualizuje View volaním jeho metód (napríklad view.display(updatedData)). View jednoducho zobrazuje údaje.