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.
- Layered pattern
- Client-server pattern
- Master-slave pattern
- Pipe-filter pattern
- Broken pattern
- Peer-to-peer pattern
- Event-bus pattern
- Model-view-controller pattern
- Blackboard pattern
- 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
- Brokery komunikatów takie jak: Apache ActiveMQ, Apache Kafka, RabbitMQ and JBoss Messaging.
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
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:
- model- zawiera najważniejsze funkcjonalności i dane
- view- przedstawia informacje użytkownikowi
- 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.