Când vine vorba de modelele de design, este posibil să aveți întrebări:
De ce ar trebui să folosim modelele de design în programare? Codul nostru poate funcționa bine fără el.
Pentru aceasta, întrebarea mea contrare ar fi: "Preferați să trăiți într-o casă de lux sau într-o unitate simplă cu patru pereți?" La urma urmei, ambele servesc scopul nostru.
În general, căutăm o casă de lux, deoarece oferă facilități mai bune și necesită mai puțină întreținere, iar întreținerea se poate face cu mai puțină hassle, deoarece baza de bază este deja acolo.
Același lucru se aplică programării: codul care utilizează modelele de design este ușor de înțeles, ușor de întreținut și ușor de extins.
În această serie de tutoriale, vom acoperi câteva modele de design diferite care sunt disponibile în programare. Veți afla despre argumentele pro și contra și factorii care indică locul în care ar trebui să le folosim.
Pe parcursul acestor tutoriale, voi lua PHP ca limbă de bază pentru a demonstra modele de design; cu toate acestea, ele sunt de fapt un concept care poate fi aplicat în orice limbaj de programare - este doar o chestiune de schimbare a sintaxei ca pe limba preferată.
Regulile de proiectare sunt separate în patru categorii:
În acest tutorial, vom acoperi modelul de proiectare a fațadelor. Acesta se încadrează în categoria modelelor structurale, deoarece se ocupă cu modul în care codul dvs. ar trebui structurat astfel încât să devină ușor de înțeles și să îl mențină bine menținut pe termen lung.
Să presupunem că aveți câteva operații care trebuie efectuate în succesiune și că aceeași acțiune este necesară în mai multe locuri din cadrul aplicației. Trebuie să plasați același cod din nou și din nou în locuri diferite. Ați făcut asta, dar după câteva zile veți găsi că ceva trebuie schimbat în codul respectiv.
Vedeți problema? Trebuie să introducem modificările în toate locurile în care există codul. E dureros, nu-i așa??
Ca o soluție, ceea ce ar trebui să faceți este să creați un controler de plumb, care să se ocupe de tot codul repetat. Din punctul de vedere al apelului, vom apela controlerul de plumb pentru a efectua acțiuni bazate pe parametrii furnizați.
Acum, dacă trebuie să introducem orice modificare în proces, atunci va trebui doar să schimbăm controlerul de plumb în loc să facem schimbarea în toate locurile în care am folosit acel cod.
În acest tutorial, să alegem o lecție pentru a face lucrurile mai ușor de citit. Să spunem că ți sa dat sarcina de a planifica căsnicia prietenului tău. Dacă faceți totul pe cont propriu, atunci imaginați-vă lucrurile pe care trebuie să le acoperiți. Aceasta va crea o posibilitate mai mare de eroare și va crește șansa de a pierde ceva care poate afecta drastic nunta prietenului tău.
În acest caz, în loc să faci totul pe cont propriu, ar trebui să folosiți un planificator de nuntă și să vă asigurați că lucrarea este făcută într-o manieră bine gestionată, cu mai puține șanse de greșeală.
Aici, vă comportați ca un client care inițiază procesul, iar planificatorul de nunți funcționează ca o "fațadă" pentru dvs., finalizând lucrarea pe baza direcției dvs..
În această secțiune vom vedea încă un exemplu, care este foarte comun pentru site-uri web, desigur cu un exemplu de cod. Vom vedea o implementare a modelului de proiectare a fațadelor utilizând un proces de verificare a produselor. Dar, înainte de a verifica codul perfect cu modelul de fațadă, să aruncăm o privire la un cod care are o problemă.
Un proces simplu de verificare include următorii pași:
// proces simplu de verificare $ productID = $ _GET ['productId']; $ qtyCheck = produs nouQty (); dacă $ qtyCheck-> checkQty ($ productID)> 0) // Adaugă produsul în coș $ addToCart = new addToCart ($ productID); // Calculați taxa de expediere $ shipping = new shippingCharge (); $ Shipping-> updateCharge (); // Calculați reducerea pe baza discountului $ = reducere nouă (); $ Discount-> applyDiscount (); $ order = comandă nouă (); $ Comanda-> generateOrder ();
În codul de mai sus, veți descoperi că procedura de plată include diverse obiecte care trebuie să fie produse pentru a finaliza operațiunea de checkout. Imaginați-vă că trebuie să implementați acest proces în mai multe locuri. În acest caz, va fi problematică când codul trebuie modificat. Este mai bine să faceți aceste modificări în toate locurile simultan.
Vom scrie acelasi lucru cu modelul fatadei, ceea ce face ca acelasi cod sa fie mai usor de intretinut si sa se poata extinde.
classOrderFacade public $ productID = "; funcția publică __construct ($ pID) $ this-> productID = $ pID; funcția publică generateOrder () if ($ this-> qtyCheck ()) $ this-> addToCart (); // Calculați taxa de expediere $ this-> calulateShipping (); // Calculați reducerea dacă orice $ this-> applyDiscount (); // Așezați și confirmați comanda $ this-> placeOrder (); funcția privată addToCart () / * ... adăugați produsul în coș ... * / funcția privată qtyCheck () $ qty = 'obține cantitatea de produs din baza de date'; dacă ($ qty> 0) return true; true funcția privată calulateShipping () $ shipping = new shippingCharge (); $ shipping-> calculateCharge (); funcția privată applyDiscount () $ discount = new discount funcția privată placeOrder () $ order = comanda nouă (); $ order-> generateOrder ();
De acum, avem pregătirea pentru fațada noastră pentru produse. Tot ce trebuie să facem este să-l folosim cu câteva canale de comunicare de cod, în loc de o grămadă de cod așa cum este exprimat în partea anterioară.
Verificați cantitatea de cod de mai jos pe care va trebui să o investiți pentru a avea un proces de plată în mai multe poziții.
// Notă: Nu ar trebui să folosim valori directe pentru interogările bazei de date pentru a împiedica injecția SQL $ productID = $ _GET ['productId']; // Doar 2 rânduri de cod în toate locurile, în loc de un proces de lungă durată peste tot $ order = new productOrderFacade ($ productID); $ Comanda-> generateOrder ();
Acum, imaginați-vă când trebuie să faceți modificări în procesul dvs. de plată. Acum creați pur și simplu modificări ale clasei de fațade pe care am creat-o, în loc să introduceți modificări în fiecare loc în care a fost aplicat.
Pur și simplu, putem spune că modelul de fațadă ar trebui să fie efectuat într-o situație în care aveți nevoie de o interfață unică pentru a finaliza mai multe proceduri, ca în exemplul planificatorului de nunți care lucrează ca o fațadă pentru a vă completa procedurile multiple.
Vă rugăm să lăsați orice comentarii sau întrebări în feed de mai jos.