>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Unknown

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

Awesome Software Architecture Banner

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

  1. Przygotowanie do rozmów kwalifikacyjnych z projektowania systemów. Kolekcja obejmuje większość pytań zadawanych w sekcjach architektonicznych.
  2. 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.
  3. 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