Mapa wzorców architektonicznych dla programistów i liderów technicznych

Po dołączeniu do projektu mikrousługowego szybko zauważasz charakterystyczny szczegół. Każdy programista inaczej rozumie czystą architekturę. Jeden próbuje wcisnąć CQRS do trzy-stronicowego CRUD-a, drugi buduje monumentalną domenę z tuzinem warstw wrapperów, a trzeci rozwiązuje problemy sprzężeń przez Event Sourcing. Aby zespół mówił jednym językiem, potrzebujesz ujednoliconej bazy wiedzy.
Każdy z nas ma dziesiątki zakładek z artykułami i filmami. Problem polega na tym, że te materiały szybko się gubią. Autor repozytorium awesome-software-architecture, Mehdi Hadeli, rozwiązał ten problem: stworzył ustrukturyzowaną kolekcję materiałów dotyczących projektowania systemów w jednym miejscu.
Czym jest to repozytorium
To otwarta baza wiedzy z linkami do artykułów, tutoriali, książek i przykładów kodu. Projekt zdobył ponad 11 000 gwiazdek na GitHubie. W przeciwieństwie do standardowych katalogów w stylu Awesome, nie tylko porządkuje ogólne tematy—obejmuje konkretne wzorce i decyzje architektoniczne.
Programiści uruchomili również oddzielną stronę internetową awesome-architecture.com, na której czytanie materiałów jest wygodniejsze niż w plikach Markdown.
Główne sekcje kolekcji
Style i podejścia architektoniczne
Repozytorium szczegółowo omawia sposoby organizacji kodu:
- Monolity i mikrousługi. Od klasycznego Monolitu po koncepcję Modular Monolith, która pomaga przygotować kod do ewentualnego podziału.
- Architektury warstwowe. Rozbiórka różnic między Clean Architecture, Onion i Hexagonal.
- Vertical Slice Architecture. Podejście grupujące kod wokół funkcji biznesowych, a nie warstw technicznych.
- Model Aktora. Zasady działania aktora z przykładami użycia frameworków Akka.NET, Orleans i ProtoActor.
Domain-Driven Design i CQRS
Sekcja DDD okazała się najbardziej szczegółowa. Autor rozłożył koncepcję Erica Evansa na elementy składowe. W katalogu znajdziesz materiały dotyczące projektowania strategicznego (Bounded Context, Ubiquitous Language) i wzorców taktycznych (Aggregates, Value Objects, Domain Services). Antywzorce takie jak Anemic Domain Model są omówione osobno.
Dedykowany blok poświęcony jest tematyce CQRS, obejmujący separację modeli odczytu i zapisu, spójność danych oraz jej powiązanie z Event Sourcingiem.
Systemy rozproszone i chmura
Przy projektowaniu usług chmurowych przydatna będzie sekcja Cloud Design Patterns:
- Wzorce odporności: Circuit Breaker, Bulkhead, Retry.
- Komunikacja: Outbox, Inbox, Saga, Change Data Capture.
- Komponenty sieciowe: API Gateway (Ambassador, Kong, Ocelot), Service Mesh (Istio, Linkerd) oraz rozwiązania do load balancingu.
Kolekcja zawiera również materiały dotyczące narzędzi infrastrukturalnych: Kubernetes, Terraform, Nomad, Kafka, RabbitMQ i NATS.
Obserwowalność i niezawodność
Osobna sekcja poświęcona jest Obserwowalności. Zawiera artykuły o śledzeniu end-to-end przez Correlation ID, zbieraniu logów przez stosy ELK, EFK, Fluent Bit i Grafana Loki. Dodatkowo obejmuje back pressure i budowanie systemów odpornych na błędy.
Funkcje i niuanse kolekcji
W samym README napotkasz tabele oznaczone jako TODO. Nie panikuj: artykuły na te tematy znajdują się już w folderze docs. Nawigacja jest dobrze zorganizowana, a materiały są rozłożone w katalogach, co ułatwia znalezienie potrzebnego tematu przez wyszukiwanie.
Słabym punktem repozytorium jest wyraźne nastawienie na stos .NET w sekcjach specyficznych dla frameworków. Biblioteki takie jak Steeltoe, MassTransit czy CAP są tam często wspominane. Jednak fundamentalne koncepcje są wszędzie takie same. Działają w projektach w Go, Javie, Pythonie czy TypeScripcie.
Jak praktycznie wykorzystać katalog
- Przygotowanie do rozmów kwalifikacyjnych z projektowania systemów. Kolekcja obejmuje większość pytań zadawanych w sekcjach architektonicznych.
- Materiał referencyjny do projektowania systemów. Pomaga odświeżyć pamięć o różnicach między aktorami a klasycznymi serwisami lub wybrać odpowiedni wzorzec komunikacyjny.
- Onboarding i szkolenie zespołu. Linki z repozytorium sprawdzają się jako lista lektur do zanurzania programistów w architekturę projektu.
Repozytorium awesome-software-architecture będzie przydatne dla programistów przechodzących od pisania funkcji do projektowania systemów. Zapisz projekt w zakładkach, aby odpowiedni artykuł o wzorcach był zawsze pod ręką.
Powiązane projekty