Modele de design pentru începători
Publicat: 2016-01-13Dacă ați scris deja programe pentru produse sau aplicații software, mari / mici, cel mai probabil ați folosit o mulțime de modele de design... deși este posibil să nu fie unul dintre modelele de design cele mai utilizate / standard.
Dar da, există o diferență evidentă între implementarea unui model de design și „utilizarea” unui model de design... oricum, persoana care lucrează cu modele de design îl înțelege sau îl va înțelege cu ușurință.
Ideea este că modelele de design nu sunt noi pentru programatori.
În acest articol de mai jos, încerc să explic modelele de design, în elementele sale de bază, și vom studia detalii ale diferitelor modele, exemple etc. într-un alt articol.
Ce este un model de design?
A incepe…
Cred că cel mai bun mod de a începe cu înțelegerea tiparelor de design este prin înțelegerea tiparelor non-tehnice pe care le urmăm cu bună știință/neștiință în viața de zi cu zi.
De exemplu, să luăm o mulțime de CV-uri trimise pentru un loc de muncă vacant. CV-ul tuturor nu arată la fel... deși toți tind să facă același lucru, adică să spună unui cititor la ce sunt calificați sau cum poate fi potrivit pentru job.
Majoritatea celor care trimit CV-uri la locuri de muncă, știu că trebuie să trimită un CV cu un anumit set de informații într-un document Word formatat.
Acesta... este un model, că toată lumea trimite un CV cu un anumit set de informații exprimate în el.
Dacă simți că... numiți-o Șabloane în loc de Șabloane. Șabloane de design.
Există multe astfel de lucruri în viața reală care sunt tipare. Unora le plac exemplele de mai jos:
Toți bucătarii din întreaga lume gătesc pizza sau cartofi prăjiți în același mod. Deși ar putea să-l adauge / să-l aromeze diferit. Acesta este un model.
Designul fiecărei mașini urmează un model de design de bază, patru roți, volan, sistemul de antrenare de bază, cum ar fi accelerator-break-clutch etc.
Toate lucrurile construite/produse în mod repetat vor urma inevitabil un model în designul său... fie că este vorba de mașini, pizza, bancomate, orice... chiar și periuță de dinți.
Design-urile care au devenit aproape o modalitate standard de codificare a unei anumite logici/mecanism/tehnică în software, prin urmare au ajuns să fie cunoscute ca – și, prin urmare – studiate ca, Modele de proiectare software.
De ce este important un model de design?
Practic din două motive:
- Pentru a respecta un standard
- Pentru a accelera dezvoltarea
O sa explic in detaliu.
În primul rând, vedem de ce este interesant să rămâneți la un model standard.
Să luăm exemplul listei de CV-uri pe care am discutat mai înainte.
S-ar putea să existe unul sau doi solicitanți care își trimit cererile de angajare prin e-mail fără formatare adecvată, fără atașamente la e-mailul lor, etc., .. acești unul sau doi solicitanți nu urmează modelul.. și NU vor ajunge probabil cu treaba.... De ce? Pentru că se abat de la un model bine stabilit, care s-ar putea să nu fie pe placul persoanelor care presează CV-urile pentru job.
Nu există cineva care se abate de la tipar și devine „cool”? Asta nu este inovație?
Da, există momente în care un CV foarte diferit prezentat primește postul pentru că este diferit de ceilalți. De obicei, am auzit de designeri web care au obținut locuri de muncă de calitate pentru că au compilat și au prezentat un film pe CD cu munca lor, sau au creat un personaj de animație care le-a explicat munca, au publicat-o pe blogul lor și lucruri de genul ăsta.
Dar... aceasta este experimentare ( Inovația vine din experimente de succes ).
Cel mai adesea, în dezvoltarea de software, nu vă permiteți să experimentați, din cauza presiunii cronologice, a așteptărilor etc., dar da, uneori, unele proiecte interesante permit unele experimente.
În software, nu putem face lucruri de bază, cum ar fi un depozit bancar... în 101 moduri... vor exista doar câteva moduri de a procesa un depozit bancar.. deci are sens să urmați un model stabilit și testat.
De asemenea, majoritatea modelelor de design au variații... unele dintre variații sunt atât de populare încât variațiile vor fi, de asemenea, un nou tip standard de model.
Proiectele software din zilele noastre sunt de așteptat (cel puțin implicit) să urmeze un design deja stabilit al unui produs/software similar pe piață.
Acesta este locul în care respectarea unui stil standard de codare sau model de proiectare ajută la dezvoltarea software-ului... fixarea dezvoltării, înlăturarea cheltuielilor generale legate de o nouă implementare netestată etc.,
Strângerea timpului de dezvoltare
Urmărirea unui model de design standard are, de asemenea, avantajul de a comunica cu ușurință prin arborele / ierarhia arhitecților software, conducătorilor de module, conducerii echipei, dezvoltatorilor etc., despre „Cum” trebuie dezvoltat ceva, și nu doar „Ce” trebuie să fie dezvoltat.
Uneori chiar ajută echipele de testare, deoarece testerii ar ști prin experiență că codul care urmează un anumit tipar de proiectare probabil ar putea fi testat într-un mod specific cu un set de instrumente de testare într-o anumită perioadă de timp, iar astfel de modele cunoscute ar putea să nu aibă unele defecte. sau au niște defecte „cunoscute”.
Utilizarea modelelor de design nu aduce o notă personală?
Nu. În primul rând pentru că nu spunem că urmați un model de design și nu se întâmplă nimic altceva. Majoritatea implementărilor de proiecte împărtășesc doar cerințe de bază cu alte proiecte și, cel mai probabil, vor avea abateri. Construirea acestor abateri va necesita flexarea și întinderea tiparelor standard utilizate într-o implementare.
Este ca și cum ai face pizza în modul standard, apoi ai aromatiza / a-l prezenta la diferite cerințe, fie ca o pizza plină de plăcintă, fie o plăcintă tăiată, sau orice altceva.

Pentru a înțelege importanța modelelor de design, un lucru este foarte **important :
Modelele de design nu sunt o tehnologie sau un cadru pe care o anumită companie sau un limbaj de programare le impune asupra noastră. Asta înseamnă că este ca un concept deschis.. ești liber să-l iei, să-l folosești, să-l modifici în funcție de nevoile tale și, important, să-l simți al tău.
Toate modelele de design standard sau populare, de fapt, sunt extensibile destul de mult.. au devenit populare, în primul rând, doar pentru că mulți oameni îl folosesc.. și mulți oameni îl folosesc doar pentru că sunt flexibili la cerințele lor.
Sau cum credeți că un model de design standard s-ar potrivi unui proiect în New Jersey pentru o companie și, de asemenea, în Bangalore pentru o altă companie și un alt tip de proiect.
Asta ne duce la „ Majoritatea modelelor de design sunt generice ”… ceea ce înseamnă că nu sunt întotdeauna folosite pentru a construi același tip de software. S-ar putea să nu auziți lucruri precum „Model de proiectare software bancar” sau „model de proiectare software de rețele sociale” folosite în discuțiile obișnuite... ci doar „Modeluri de design”.
Pe cine ar trebui să-i deranjeze modelele de design?
- Așa cum un arhitect de clădire bun își dezvoltă abilitățile de a proiecta clădiri, studiind arhitectura și designul numeroaselor clădiri și forme de-a lungul vieții sale, un arhitect software ar trebui să studieze și să vizualizeze modul în care sunt proiectate sau diferite sisteme software/tehnologice de pe glob. arhitect.
- Și la fel cum lucrătorii din construcții ai unei clădiri ar trebui să cunoască diferitele modalități de implementare a unui proiect de clădire, fie din propria experiență, fie prin înțelegerea acesteia de la arhitectul clădirii.
Dezvoltatorii/programatorii de software ar trebui să înțeleagă modelele de bază de proiectare a software-ului și codul lor de implementare... fie ei înșiși, fie de la arhitectul software care instruiește echipa să-l dezvolte urmând un anumit model.
Modele de cod de bază
În primele rânduri ale acestui articol, am spus că orice programator ar fi folosit modele de design. Iată câteva exemple de bază de cod care urmează un model.
- Mai jos este un model de design de bază al filtrului de interceptare .
- Ascunde codul de copiere
- [cod]
comutator (condiție){
Case Value1:
Case Value2:
Mod implicit:
}
[/cod] - Declanșatoarele de evenimente, gestionatorii de evenimente... se încadrează în modelul de design de bază Subject-Observer . Vom discuta despre fiecare tipar standard, variante populare, cu exemple... în curând.
- Dacă ați folosit un fel de colecții, cum ar fi Arraylist în C#, și ați repetat prin matrice, atunci ați folosit un model de design de bază Iterator .
- Codul de mai jos este un exemplu de model de bază de gestionare a excepțiilor/ lanț de responsabilitate .
- Ascunde codul de copiere
- [cod]
încerca{
}catch(Excepție ex){
}
in cele din urma{
}
[/cod]
Diferite zone ale modelelor de design
Există terminologii diferite în software, altele decât Design Patterns.. unele dintre ele sunt adesea legate de Design pattern-uri pe care le-am discutat până acum.. iar unele dintre ele complet fără legătură.
Ceea ce am discutat până acum mai sus se numește uneori „ Modele de proiectare de implementare ”.
Există și altele, cum ar fi modele de arhitectură, modele de cadru, modele de limbă (denumite mai ales construcții de limbaj).
Sunt modele așezate la diferite niveluri... cum ar fi modelele de limbaj sunt modele implementate ca parte a limbajelor de programare precum C# / Java, ca caracteristici / constructe ale limbajului.. unele dintre ele le-am văzut deja.
Toate exemplele de mai sus de subiect-observator, filtru de interceptare etc., sunt absorbite ca constructe de limbaj în toate limbajele de programare de nivel înalt populare care au venit după C.
Modelele de arhitectură sunt acele modele standard de arhitectură software, care se referă în mod obișnuit la diferite metode de plasare sau legare a modulelor sau a straturilor sau a nivelurilor, alcătuind întreaga aplicație.
Acest lucru nu are nicio legătură cu modelele de proiectare în sensul codării/programarii care... dar împărtășesc aceleași răspunsuri la De ce / Ce este discutat în acest articol.
Modelele cadru nu au nicio legătură cu discuția noastră despre modelele de design. Când cadrele precum .NET implementează mijloace speciale pentru erorile de înregistrare sau traseele de execuție a codului de urmărire cu ușurință prin metodele sau obiectele încorporate în cadrul cadrului, astfel de mecanisme sunt denumite modele de cadru.
Câteva exemple din .NET Framework includ caracteristica stackTrace, caracteristica de atribut de clasă cu [] acolade pătrate deasupra definițiilor de clasă/metode etc.. Când folosim astfel de caracteristici, codificăm cu modelele încorporate din Framework.
Sper că acest articol vă ajută să ofere o prezentare generală a modelelor de design și a terminologiilor aferente.
Până acum, am discutat doar care sunt standardele și cât de importante sunt acestea.. dar nu am discutat care sunt modelele standard în sine.
Licență
Acest articol, împreună cu orice cod sursă și fișiere asociate, este licențiat sub Licența Open Code Project (CPOL).