Wzorce architektoniczne w pigułce

Zastanawiałeś/aś się kiedyś jak są zaprojektowane systemy w projektach na dużą skalę? Zanim rozpocznie się złożony proces wytwórczy oprogramowania, trzeba dokonać wyboru odpowiedniej architektury - takiej, która przewiduje funkcjonalności, na których nam zależy, o odpowiednich właściwościach. Dlatego też ważna jest znajomość różnych wzorców.


Czym jest wzorzec architektoniczny?

Idąc za Wikipedią:

Wzorzec architektoniczny to uznany i sprawdzony sposób rozwiązania często występujących problemów z zakresu architektury oprogramowania. Koncepcja wzorców architektonicznych jest zbliżona do idei wzorców projektowych, ale jej zakres jest szerszy. 

Skupię się na poniższych dziesięciu często stosowanych wzorcach architektonicznych (patterns)Wyjaśnię, na czym polegają i kiedy się je stosuje.

  1. Layered pattern
  2. Client-server pattern
  3. Master-slave pattern
  4. Pipe-filter pattern
  5. Broken pattern 
  6. Peer-to-peer pattern
  7. Event-bus pattern
  8. Model-view-controller pattern
  9. Blackboard pattern
  10. Interpreter pattern 



1. Layered pattern 

Wzorzec architektury warstwowej stosowany przy organizacji programów, które można podzielić na zespoły podzadań o indywidualnym poziomie abstrakcji. Każda warstwa obsługuje następną, wyższą.

Oto cztery najczęściej spotykane warstwy ogólnych systemów informatycznych:

  • Presentation layer (pl. warstwa prezentacji, nazywana też warstwą UI)
  • Application layer (pl. warstwa aplikacji, inaczej: warstwa serwisowa)
  • Business logic layer (pl. warstwa logiki biznesowej; warstwa domeny)
  • Data access layer (pl. warstwa dostępu do danych, znana też jako persistence layer - warstwa trwałości)


Zastosowanie

  • Aplikacje desktopowe
  • Webowe aplikacje e-commerce 




2. Client-server pattern

Ten wzorzec składa się z serwera i wielu klientów, które korzystają z jego usług. Programy serwera spełniają żądania klientów.

Zastosowanie

  • Aplikacje online takie jak e-mail, aplikacje umożliwiające dzielenie się dokumentami, aplikacje związane z bankowością





3. Master-slave pattern

Ten wzorzec składa się z jednostki nadrzędnej (master) i podrzędnych (slaves). Ta nadrzędna dystrybuuje pracę pośród identycznych jednostek podrzędnych i oblicza końcowy rezultat bazując na wynikach zwróconych przez slaves.

Zastosowanie

  • Przy powielaniu bazy danych. Mamy wtedy bazę danych (mastera) i zsynchronizowane z nią bazy danych (slaves). 
  • Urządzenia peryferyjne (slaves) podłączone do magistrali komputera (master)




4. Pipe-filter pattern

Pipe-filter pattern (pl. architekturę filtrów i potoków) można wykorzystywać do organizacji systemów, które wytwarzają i przetwarzają strumień danych. Każdy etap przetwarzania mieści się w komponencie filter (filtr)Dane do przetworzenia przechodzą przez pipes (potoki) - które mogą służyć do buforowania lub synchronizacji.

Zastosowanie

  • Kompilatory. Kolejne filtry wykonują analizę leksykalną, parsowanie, analizę semantyczną, tworzenie kodu
  • Cykl pracy w bioinformatyce





5. Broker pattern

Wzorca używa się, by organizować systemy rozproszone o oddzielonych komponentach, które mogą oddziaływać na siebie na odległość. Komponent broker koordynuje komunikację pomiędzy nimi

Serwery komunikują komponentowi broker swoje usługi i cechy charakterystyczne. Broker otrzymuje też żądania klientów, a następnie przekierowuje klientów do odpowiedniej usługi ze swojego rejestru. 

Zastosowanie





6. Peer-to-peer pattern

Każdy odrębny komponent w tym wzorcu to peer, który może działać zarówno jako klient wysyłający żądania do innych peers, jak i serwer, zapewniający usługi innym peers. Może pełnić rolę klienta lub serwera, albo obu jednocześnie, a ta rola może zmieniać się dynamicznie w czasie. 

Zastosowanie

  • Sieci wymiany plików takie jak: Gnutella and G2
  • Protokoły multimedialne takie jak: P2PTVPDTP





7. Event-bus pattern

Ten wzorzec wiąże się z events (zdarzeniami). Ma cztery główne komponenty: event source, event listener, channel oraz event bus. Sources publikują wiadomości na dane channels (kanały) komponentu event bus. Listeners subskrybują poszczególne channels (kanały) i dostają notyfikacje o dostępnych w nich wiadomościach.

Zastosowanie

  • Rozwijanie systemu Android 
  • Usługi notyfikacyjne




8. Model-view-controller pattern

Wzorzec znany również jako MVC. Dzieli aplikację na trzy elementy

  1. model - zawiera najważniejsze funkcjonalności i dane 
  2. view - przedstawia informacje użytkownikowi
  3. controller - zajmuje się danymi wprowadzonymi przez użytkownika


Umożliwia to odseparowanie wewnętrznej interpretacji informacji od sposobu, w jaki informacja jest dostarczana i prezentowana użytkownikowi. Rozłącza komponenty i pozwala na efektywne ponowne wykorzystanie kodu. 

Zastosowanie

  • Architektura aplikacji webowych w większości języków programowania
  • Frameworki takie jak Django czy Rails




9. Blackboard pattern

Wzorzec jest przydatny, gdy nie istnieją deterministyczne strategie rozwiązania danego problemu. Składa się z trzech głównych komponentów:

  • blackboard-  ustrukturyzowana pamięć ogólna, która zawiera obiekty w przestrzeni rozwiązań (solutions
  • knowledge source  -  wyspecjalizowane moduły ze swoją własną reprezentację
  • control component  - selekcjonuje, konfiguruje i uruchamia moduły


Wszystkie komponenty mają dostęp do blackboardu
i mogą generować nowe obiekty danych, które będą do niego dodane. Szukają w blackboardzie konkretnego rodzaju danych. Mogą to zrobić poprzez operację pattern matching (dopasowanie do wzorca) z istniejącym źródłem wiedzy.

Zastosowanie

  • Rozpoznawanie mowy
  • Identyfikacja i śledzenie pojazdów 
  • Rozpoznawanie struktury białek
  • Identyfikacja sygnałów świetlnych




10. Interpreter pattern

Wzorzec wykorzystuje się, by zaprojektować kompoment, który zinterpretuje program napisany w wyspecjalizowanym języku. Precyzuje jak czytać linie programu - czyli wyrażenia napisane w danym języku. Podstawowym założeniem przy tym wzorcu jest istnienie klasy dla każdego symbolu języka.

Zastosowanie

  • Języki zapytań baz danych takie jak SQL
  • Języki służące do opisy protokołów komunikacyjnych




Mam nadzieję, że to, co przeczytałeś, okazało się dla Ciebie przydatne! 😊 Artykuł jest również dostępny w wersji anglojęzycznej.