Modele projektowania dla początkujących
Opublikowany: 2016-01-13Jeśli pisałeś już programy dla produktów lub aplikacji, duże/małe, najprawdopodobniej używałeś wielu wzorców projektowych… chociaż możliwe, że nie są one jednym z najczęściej używanych/standardowych wzorców projektowych.
Ale tak, istnieje oczywista różnica między implementacją wzorca projektowego a „używaniem” wzorca projektowego… tak czy inaczej, osoba pracująca z wzorcami projektowymi rozumie go lub z łatwością zrozumie.
Chodzi o to, że wzorce projektowe nie są nowe dla programistów.
W poniższym artykule staram się wyjaśnić wzorce projektowe, w ich podstawach, a szczegóły różnych wzorców, przykłady itp. przestudiujemy w innym artykule.
Co to jest wzorzec projektowy?
Na początek…
Myślę, że najlepszym sposobem na rozpoczęcie od zrozumienia wzorców projektowych jest zrozumienie nietechnicznych wzorców, którymi świadomie/bezwiednie podążamy w naszym codziennym życiu.
Weźmy na przykład wiele życiorysów przesłanych na wolne stanowisko. CV wszystkich nie wygląda tak samo… chociaż wszyscy robią to samo, to znaczy mówią czytelnikowi, w czym są uzdolnieni lub jak mogą się nadawać do pracy.
Większość z nich, którzy przesyłają CV do pracy, wie, że muszą przesłać CV z określonym zestawem informacji w sformatowanym dokumencie Word.
To… jest taki schemat, że każdy przesyła CV z określonym zestawem wyrażonych w nim informacji.
Jeśli masz ochotę… nazwij to Szablonami zamiast Wzorami. Szablony projektowe.
W prawdziwym życiu jest wiele takich rzeczy, które są wzorami. Niektórzy ludzie lubią poniższe przykłady:
Wszyscy kucharze na całym świecie gotują w ten sam sposób pizzę lub frytki. Chociaż mogą go posypać/smakować w inny sposób. To jest wzór.
Konstrukcja każdego samochodu jest zgodna z podstawowym wzorem konstrukcyjnym, czterema kołami, kierownicą, podstawowym układem napędowym, takim jak sprzęgło hamulca itp.
Wszystkie rzeczy wielokrotnie budowane / produkowane, nieuchronnie muszą podążać za wzorem w swoim projekcie… czy to samochody, pizza, bankomaty, cokolwiek… nawet szczoteczka do zębów.
Projekty, które stały się niemal standardowym sposobem kodowania logiki/mechanizmu/techniki w oprogramowaniu, stąd są znane jako – a co za tym idzie – badane jako Wzorce Projektowania Oprogramowania.
Dlaczego wzorzec projektowy jest ważny?
Zasadniczo z dwóch powodów:
- Trzymać się standardu
- Aby przyspieszyć rozwój
Wyjaśnię szczegółowo.
Po pierwsze, widzimy, dlaczego trzymanie się standardowego wzoru jest interesujące.
Weźmy pod uwagę listę przykładów CV, które omówiliśmy wcześniej.
Może istnieć jeden lub dwóch kandydatów, którzy wysyłają swoje podania o pracę w wiadomości e-mail bez odpowiedniego formatowania, bez załączników do wiadomości e-mail itp. .. ci jeden lub dwóch kandydatów nie postępuje zgodnie z wzorcem ... i prawdopodobnie nie skończą z pracą…. Dlaczego? Ponieważ odbiegają od ugruntowanego schematu, który może nie być lubiany przez osoby umieszczające CV na liście kandydatów do pracy.
Czy nie ma nikogo, kto odchodzi od schematu i staje się „cool”? Czy to nie jest innowacja?
Tak, zdarza się, że bardzo różnie prezentowany życiorys dostaje pracę za to, że różni się od innych. Zwykle słyszałem o projektantach stron internetowych, którzy dostali najlepsze prace, ponieważ skompilowali i zaprezentowali film ze swojej pracy na płycie CD lub stworzyli postać animacyjną wyjaśniającą ich pracę, umieścili to na swoim blogu i tym podobne.
Ale... to jest eksperymentowanie ( innowacja pochodzi z udanych eksperymentów ).
Najczęściej w tworzeniu oprogramowania nie można sobie pozwolić na eksperymentowanie ze względu na presję czasu, oczekiwania itp., ale tak, czasami niektóre ciekawe projekty pozwalają na pewne eksperymenty.
W oprogramowaniu nie możemy zrobić podstawowych rzeczy, takich jak wpłata bankowa… na 101 sposobów… będzie tylko kilka sposobów na przetworzenie wpłaty bankowej… więc ma sens podążanie za ustalonym i przetestowanym wzorcem.
Ponadto większość wzorów projektowych ma wariacje… niektóre z wariacji są tak popularne, że wariacje będą również nowym standardowym typem wzoru.
Oczekuje się, że projekty oprogramowania w dzisiejszych czasach (przynajmniej domyślnie) będą podążać za już ustalonym projektem podobnego produktu / oprogramowania na rynku.
W tym przypadku trzymanie się standardowego stylu kodowania lub wzorca projektowego pomaga w tworzeniu oprogramowania… przyspieszając rozwój, usuwając narzuty związane z przejmowaniem się nową, nieprzetestowaną implementacją itp.,
Zapinanie czasu rozwoju
Przestrzeganie standardowego wzorca projektowego ma również tę zaletę, że łatwo komunikuje się poprzez drzewo/hierarchię architektów oprogramowania, kierowników modułów, kierowników zespołów, programistów itp. na temat „Jak” coś musi zostać opracowane, a nie tylko „co” musi być rozwinięty.
Czasami pomaga to nawet zespołom testującym, ponieważ testerzy z doświadczenia wiedzą, że kod podążający za konkretnymi wzorcami projektowymi prawdopodobnie mógłby być testowany w określony sposób za pomocą zestawu narzędzi testujących w określonym czasie, a takie znane projekty mogą nie mieć wad lub mieć pewne „znane” wady.
Czy używanie wzorców projektowych nie nabiera osobistego charakteru?
Nie. Po pierwsze dlatego, że nie mówimy, że podążasz za wzorcem projektowym i nic więcej się nie dzieje. Większość wdrożeń projektów dzieli tylko podstawowe wymagania z innymi projektami i najprawdopodobniej będzie mieć odchylenia. Budowanie tych odchyleń będzie wymagało wyginania i rozciągania standardowych wzorców używanych w implementacji.

To jest jak robienie pizzy w standardowy sposób, a następnie doprawianie jej / przedstawianie jej do różnych wymagań, na przykład pełnej pizzy, pokrojonego ciasta lub czegokolwiek.
W zrozumieniu znaczenia wzorców projektowych bardzo **ważna jest jedna rzecz:
Wzorce projektowe nie są żadną technologią ani strukturą, którą wymusza na nas konkretna firma lub język programowania. Oznacza to, że jest jak otwarta koncepcja… możesz ją przyjąć, użyć, zmodyfikować do swoich potrzeb, a co najważniejsze… poczuć ją na własną rękę.
Wszystkie standardowe lub popularne wzorce projektowe są w rzeczywistości dość mocno rozszerzalne.. stały się popularne, po pierwsze, tylko dlatego, że wiele osób z nich korzysta.. a wiele osób korzysta z nich tylko dlatego, że są elastyczne w stosunku do ich wymagań.
Albo jak myślisz, jak standardowy wzór pasowałby do projektu w New Jersey dla firmy, a także w Bangalore dla innej firmy i innego rodzaju projektu.
To prowadzi nas do „ Większość wzorców projektowych jest ogólnych ”… co oznacza, że nie zawsze są używane do tworzenia tego samego typu oprogramowania. Możesz nie słyszeć takich rzeczy jak „Wzorzec projektowania oprogramowania bankowego” lub „Wzorzec projektowania oprogramowania sieci społecznościowych” używanych w powszechnych dyskusjach… ale tylko „Wzorce projektowe”.
Kto powinien się przejmować wzorcami projektowymi?
- Tak jak dobry architekt budowlany rozwija swoje umiejętności projektowania budynków, studiując architekturę i projektowanie wielu budynków i kształtów przez całe życie, architekt oprogramowania powinien studiować i wizualizować, jak różne systemy oprogramowania/technologii są projektowane na całym świecie lub zaprojektowany.
- I tak samo, jak pracownicy budowlani powinni być świadomi różnych sposobów realizacji projektu budowlanego, czy to z własnego doświadczenia, czy też poprzez zrozumienie go od Architekta budynku.
Twórcy oprogramowania/programiści powinni rozumieć podstawowe wzorce projektowania oprogramowania i ich kod implementacji… albo sami, albo od architekta oprogramowania, który instruuje zespół, aby opracował je zgodnie z określonym wzorcem.
Podstawowe wzorce kodu
W początkowych liniach tego artykułu powiedziałem, że każdy programista użyłby wzorców projektowych. Oto kilka bardzo podstawowych przykładów kodu podążającego za wzorcem.
- Poniżej przedstawiono podstawowy wzorzec projektowy filtra przechwytującego .
- Ukryj kod kopiowania
- [kod]
przełącznik (stan){
przypadek Wartość1:
przypadek Wartość2:
domyślna:
}
[/kod] - Wyzwalacze zdarzeń, programy obsługi zdarzeń... należą do podstawowego wzorca projektowego podmiotu-obserwatora . Omówimy wszystkie wzorce, popularne wariacje, przykłady... wkrótce.
- Jeśli używałeś jakiegoś rodzaju kolekcji, na przykład Arraylist w C#, i iterowałeś po tablicy, to użyłeś podstawowego wzorca projektowego Iteratora .
- Poniższy kod jest przykładem podstawowego wzorca obsługi wyjątków / łańcucha odpowiedzialności .
- Ukryj kod kopiowania
- [kod]
próbować{
}chwyt (wyjątek np.){
}
wreszcie{
}
[/kod]
Różne obszary wzorców projektowych
W oprogramowaniu istnieją różne terminologie inne niż Wzorce Projektowe. Niektóre z nich są często związane z Wzorcami Projektowymi, o których do tej pory dyskutowaliśmy.. a niektóre zupełnie niepowiązane.
To, co do tej pory omówiliśmy powyżej, jest czasami nazywane „ wzorcami projektowania wdrożeń ”.
Istnieją inne, takie jak wzorce architektury, wzorce ramowe, wzorce językowe (głównie nazywane konstrukcjami językowymi).
Są to wzorce ułożone na różnych poziomach… tak jak Wzorce językowe to wzorce zaimplementowane jako część języków programowania takich jak C#/Java, jako cechy/konstrukcje języka… niektóre z nich już widzieliśmy.
Wszystkie powyższe przykłady podmiotu-obserwatora, filtra przechwytującego itp. są wchłaniane jako konstrukcje językowe we wszystkich popularnych językach programowania wysokiego poziomu, które pojawiły się po C.
Wzorce architektury to te standardowe modele architektury oprogramowania, zwykle odnoszące się do różnych metod umieszczania lub łączenia modułów, warstw lub warstw, tworzących pełną aplikację.
Jest to całkowicie niezwiązane z wzorcami projektowymi w sensie kodowania/programowania, które… ale mają te same odpowiedzi na pytanie „dlaczego/co” omówione w tym artykule.
Wzorce ramowe są również niezwiązane z naszą dyskusją na temat wzorców projektowych. Gdy platformy, takie jak .NET, implementują specjalne środki do rejestrowania błędów lub śledzenia tras wykonywania kodu z łatwością za pomocą wbudowanych metod lub obiektów platformy, takie mechanizmy są określane jako wzorce platformy.
Niektóre przykłady w .NET Framework obejmują funkcję stackTrace, funkcję atrybutu klasy z nawiasami kwadratowymi [] nad definicjami klasy/metody itp. Podczas korzystania z takich funkcji kodujemy z wbudowanymi wzorcami Framework.
Mam nadzieję, że ten artykuł pomoże w omówieniu wzorców projektowych i związanych z nimi terminologii.
Do tej pory dyskutowaliśmy tylko o tym, czym są standardy i jak są ważne… ale nie dyskutowaliśmy o tym, jakie są same wzorce standardów.
Licencja
Ten artykuł, wraz z wszelkimi powiązanymi kodami źródłowymi i plikami, jest objęty licencją The Code Project Open License (CPOL).