Sobes.tech
Middle

Ի՞նչ տարբերություններ կան MVC և MVP ճարտարապետական ձևանմուշների միջև։

sobes.tech AI

Պատասխան AI-ից

MVC (Մոդել-Դիտակ-Կառավարիչ) և MVP (Մոդել-Դիտակ-Համառիչ) — երկու հանրահայտ ճարտարապետական ձևաչափեր, որոնք նախատեսված են ծրագրի բաղադրիչների բաժանման համար՝ բարելավելու պահպանելիությունը և փորձարկելիությունը։ Հիմնական տարբերությունները վերաբերում են պատասխանատվության բաշխմանը և բաղադրիչների միջև փոխազդեցությանը։

MVC (Մոդել-Դիտակ-Կառավարիչ):

  • Մոդել: պարունակում է ծրագրի տվյալները և բիզնես տրամաբանությունը։ Չի տեղեկացված View կամ Կառավարիչ մասին։
  • Դիտակ: ցուցադրում է Մոդելից տվյալները և մշակում է օգտվողի գործողությունները (օրինակ՝ կոճակների սեղմում)։ Դիտակը ուղղակի կապված է Մոդելին (գնում է տվյալները նրանից)։
  • Կառավարիչ: հանդես է գալիս որպես միջնորդ Մոդել և Դիտակ միջև։ Ստանում է գործողություններ View-ից, թարմացնում է Մոդելը և ընտրում է Դիտակ՝ ցուցադրելու համար։

MVC-ում View և Կառավարիչը սերտորեն կապված են։ View-ը կարող է ուղղակի դիմել Մոդելին տվյալների համար, ինչը կարող է բարդացնել View-ի փորձարկումը։ Կառավարիչը թարմացնում է Մոդելը, և Մոդելը իր հերթին տեղեկացնում է View-ին փոփոխությունների մասին (հաճախ՝ KVO կամ NotificationCenter միջոցով)։

MVP (Մոդել-Դիտակ-Համառիչ):

  • Մոդել: նման է MVC-ի Մոդելին, պարունակում է տվյալներ և բիզնես տրամաբանություն։
  • Դիտակ: ցուցադրում է տվյալները և փոխանցում բոլոր օգտվողի գործողությունները Համառիչին։ Դիտակը՝ պասիվ է, չի պարունակում բիզնես տրամաբանություն և ուղղակիորեն չի փոխազդում Մոդելին։
  • Համառիչ: հանդես է գալիս որպես վերահսկիչ, բայց այլ պատասխանատվությամբ։ Ստանում է գործողություններ View-ից, փոխազդում է Մոդելին տվյալների թարմացման համար և հետո թարմացնում է View-ը, կանչելով նրա մեթոդները։ Համառիչը գիտի View և Model։

Մ MVP-ում View-ը ամբողջությամբ առանձին է Մոդելից։ Համառիչը միջնորդ է, որը մշակվում է որպես լոգիկայի միջնորդ, որը աշխատում է View և Model միջև։ Համառիչը «սեղմում» է տվյալները դեպի View։ Սա դարձնում է View-ը ավելի «խելքավոր» և հեշտացնում է Համառիչների մեկուսացված փորձարկումը։

Համեմատական աղյուսակ:

Գծագիր MVC MVP
View-ի և Model-ի կապը View-ը կարող է դիմել Model-ին View-ը չի ճանաչում Model-ը
Հիմնական կապի դերակատարությունը Կառավարիչ Համառիչ
View-ի թարմացում Model-ը տեղեկացնում է View-ին (Pull) Համառիչը թարմացնում է View-ը (Push)
«Խելացի» View Կարող է պարունակել ցուցադրման տրամաբանություն Պասիվ, պարունակում է նվազագույն տրամաբանություն
Փորձարկում View-ի փորձարկումը կարող է ավելի բարդ լինել Համառիչի փորձարկումը՝ ավելի հեշտ
Զависимости Կառավարիչը կախված է View-ից և Model-ից Համառիչը կախված է View-ից և Model-ից

Պարզեցված փոխազդեցության օրինակ:

MVC:

  1. Օգտվողը սեղմում է View-ում գտնվող կոճակը:
  2. View-ը տեղեկացնում է Կառավարիչին:
  3. Կառավարիչը մշակում է գործողությունը, հնարավոր է՝ թարմացնում է Model-ը:
  4. Model-ը տեղեկացնում է View-ին տվյալների փոփոխության մասին:
  5. View-ը թարմացնում է իր ինտերֆեյսը՝ ստանալով տվյալները Model-ից:

MVP:

  1. Օգտվողը սեղմում է View-ում գտնվող կոճակը:
  2. View-ը փոխանցում է գործողությունը Համառիչին (օրինակ՝ կանչում է View-ի պրոտոկոլի մեթոդը):
  3. Համառիչը մշակում է գործողությունը, փոխազդում է Model-ի հետ:
  4. Համառիչը ստանում է թարմացված տվյալները Model-ից:
  5. Համառիչը թարմացնում է View-ը՝ կանչելով նրա մեթոդները (օրինակ՝ view.display(updatedData))։ View-ը պարզապես ցուցադրում է տվյալները։