Sunday, January 26, 2014

Șablonul arhitectural - MVC ( Model - View - Controller )

MVC ( Model - View - Controller ) reprezintă un model arhitectural în care "logica programului" este separată de operațiunile de input și output. Mai bine zis programul va fi împărțit în trei zone:
  • zona Model: unde se vor afla informațiile adică baza de date a programului.
  • zona View: aici se va găsi tot ce este legat de afișare precum și operațiile prin care preluăm date de la utilizator ( input și output ).
  • zona Controller: zona în care se face legătura dintre Model și View; în Controller se preia date de la utilizator prin intermediul View-ului, se verifică datele și apoi se accesează Modelul folosind date primite de la View.
În programele create până acum nu era făcută o diferență intre ceea ce reprezenta informație de la/pentru utilizator și ceea ce reprezinta logica programului.
Cam așa arată în mod normal dependența dintre datele primite de la utilizator și prelucrarea acestora.



MVC-ul întroduce o nouă componentă care ajuta la separarea legăturii dintre cele două componente.

 
Acum că avem acel controller, acesta se va ocupa gestionarea datelor primite de la View, le va verifica și apoi va accesa modelul furnizând acele date primite de la utilizator.



În continuare vom vedea cum ar trebui să arate un program care este proiectat folosind acest șablon. Vom considera mai departe trei clase Agenda( Model-ul ), Controller( Controller ) și Interfata ( View ) fiecare cu câteva metode și atribute sugestive pentru ce avem noi nevoie momentan.

Mai jos avem câteva metode din clasa Agenda:

...
public:
 void adaugaContact( Contact c );
 void eliminaContact();
...


Și câteva metode din clasa Interfata:

...
public:
 int getUserAction();
 void afisareInterfataAdaugareContact(...);
 void afisareInterfataEliminareContact(...);
...


Acum trecem la clasa Controller care va conține un obiect de tip Interfata și un obiect de tip Agenda pe lângă alte atribute.

Cum spuneam mai sus controller-ul are rol de a media cele două componente. Așadar o metoda, spre exemplu de control asupra adăugării unui contact va arăta cam așa:

...
void Controller::controllerAdaugareContact(void)
{
 interfata->afisareInterfataAdaugareContact(...);

 // urmează partea în care se verifică informațiile primite de la utilizator
 // apoi se crează contactul propriu zis pe baza acestora
 // după care se trimit informațiile Model-ului

 agenda->adaugareContact( c );
}
...

Implementarea este sumară deoarece scopul nostru este să înțelegem cât mai bine cum funcționează acest șablon.

După cum ați observat mai sus, clasa Controller va conține metode în care se va realiza legătura dintre interfață și model. Pentru operații simple asupra Model-ului, cum ar fi afișarea unui contact, se poate accesa direct Model-ul printr-o interogare de stare acesta răspunzând printr-o notificare asupra stării acestuia. Ideea e că pentru chestii legate de afișare nu mai este nevoie de controller să medieze legătura dintre Model și View.

No comments:

Post a Comment