Site in constructie!
Va rugam reveniti!



Design patterns

Design patterns (proiectarea modelelor) sunt un un set de solutii ce pot fi aplicate diverselor probleme intalnite frecvent in programarea orientata pe obiect.
Teoretic, aceste modele nu au legatura cu codul scris de programator. Sunt solutii de eficientizare a unor probleme intalnite frecvent, niste indicatii pe care programatorul trebuie sa le transpuna in limbajul de programare folosit. Ne vom referi in continuare la aceste modele implementate limbajul Java.

Singleton

Modelul Singleton permite accesul la o singura resursa care nu va fi niciodata duplicata, dar care trebuie facuta disponibila in orice moment al executiei aplicatiei.

Front Controller

Se doreste centralizarea punctului de acces a componentei ce trateaza cererile la nivelul de prezentare.
Sistemul necesita un punct de acces unde componenta responabila cu tratarea cererilor sa aibe acces centralizat. Fara acest punct de acces central, codul de control care este comun pentru mai multe cereri, este duplicat in mai multe locuri. Insa atunci cand codul de control este amestecat cu cel pentru crearea interfetei, aplicatia devine nemodulara si coeziva. In plus, faptul de a avea codul de control in mai multe locuri il face dificil de intretinut, iar o simpla modificare asupra codului presupune parcurgerea mai multor parti ale aplicatiei.

Obiectivele Front Controller Pattern-ului:
- evitarea duplicarii codului corespunzator controlului logic al aplicatiei;
- aplicarea unei logici comune mai multor cereri;
- separarea in cadrul sistemului a procesarii logice de partea de vizualizare;
- centralizarea punctului de acces a controlului in sistem.

Front Controller-ul este utilizat ca punct initial de contact dintre componentele responsabile cu tratarea cererilor si cererile in sine. Front Controller-ul centralizeaza astfel, controlul logic al aplicatiei (site-ului) care altfel ar putea fi duplicat - in diverse puncte de acces, si administreaza activitatea de tratare a cererilor.

Datorita centralizarii controlului logic, acest Design Pattern ajuta la reducerea logicii incluse direct in partea de interfata. De exemplu, pentru o pagina JSP, aplicarea acestui Design Pattern, reduce o mare cantitate de cod Java, numita scriptlet, in cadrul paginii.

Acest Design Pattern este asemnator cu Intercepting Filter, descris mai jos, deoarece, amandoua refactorizeaza si consolideaza parti comune din logica nivelului de prezentare a aplicatiei. Marea diferentiere dintre cele doua ar fi faptul ca, Intercepting Filter produce o cuplare slaba a filtrelor procesoare inlantuite, precum si strategii importante pentru executia pre si post procesarii. Centralizarea controlului prin intermediul Front Controller precum si reducerea dimensiunilor interfetei aplicatiei si procesarii logice, promoveaza reutilizarea codului la nivelul tratarii cererilor, reducand duplicarea. In afara aplicatiilor triviale, folosirea Front Controller este de preferat in locul inserarii de cod in mai multe locuri din interfata aplicatiei.

Deobicei, Front Controller se foloseste impreuna cu Design Pattern-ul Application Controller, care este responsabil cu managementul actiunii si vizualizarii(view).

  • Managementul actiunii se refera la localizarea si dirijarea catre o actiune specifica care va trata cererea respectiva.
  • Managementul vizualizarii se refera la identificarea si expedierea catre vizualizarea(view-ul) corespunzatoare. Chiar daca acest comportament poate fi rezolvat cu Front Controller, este de preferat partitionarea sa in clase separate prin folosirea Application Controller, deoarece ofera modularitate, mentanabilitate si reutilizare.

Cu toate ca tratarea cererilor inrudite este centralizata, nu se impune o limitare in sistem a numarului de componente ce rezolva cererile. Comportamentul cel mai intalnit este de a avea un singur Front Controller responsabil cu tratarea cererilor, insa, o aplicatie web poate avea mai multe controller-e, fiecare mapat unui anumit set de servcii distincte.

Cea mai utilizata abordare a Front Controller este in combinatie cu Application Controller, folosind strategia Command si Controller. Deasemeni este posibil sa se invoce direct din controller un obiect auxiliar (helper) cu anumite motode puternic tipizate ce are ca efect evitarea Application Controller-ului.

Imagine:FrontControllerClassDiagram.gif Intercepting Filter

Se intercepteaza si manipuleaza cererea (inclusiv raspunsul) inainte ca cererea sa fie procesata.