Czym jest architektura oprogramowania?
Wyobraź sobie, że budujesz dom. Zanim murarze wezmą się do pracy, potrzebujesz planu całego budynku – gdzie będą ściany, jak duże będą pokoje, gdzie umieścić instalacje. To właśnie jest architektura!
W świecie oprogramowania, architektura to „big picture” systemu. To wysokopoziomowa struktura, która określa:
- Jakie główne komponenty będzie miał system
- Jak te komponenty będą się ze sobą komunikować
- Jaka technologia zostanie użyta
- Jak skalowalny będzie system
- Jak zapewnić bezpieczeństwo, wydajność i niezawodność
Architekturę oprogramowania zazwyczaj tworzy się na początku projektu i rzadko się ją zmienia, bo wszelkie modyfikacje na tym poziomie mogą mieć ogromny wpływ na cały system.
Czym jest projektowanie oprogramowania?
Wracając do analogii z domem – projektowanie oprogramowania to jak planowanie konkretnych pokoi. Kiedy już wiesz, gdzie będzie kuchnia, musisz zdecydować, jak dokładnie ją urządzić, gdzie umieścić sprzęty, jak będą wyglądać szafki itd.
Projektowanie oprogramowania dotyczy mniejszych, bardziej szczegółowych elementów:
- Jak konkretnie będzie działał dany moduł lub komponent
- Jakie klasy i funkcje będą potrzebne
- Jak implementować konkretne algorytmy
- Jak zorganizować kod w pliki i katalogi
Najważniejsze różnice
Zakres
Architektura: Makrostruktura systemu – „z lotu ptaka” Projektowanie: Mikrostruktura konkretnych komponentów – „z bliska”
Poziom abstrakcji
Architektura: Wysokopoziomowe koncepcje, bez zagłębiania się w szczegóły implementacyjne Projektowanie: Niskopoziomowe rozwiązania, konkretne mechanizmy i strategie
Cel
Architektura: Zapewnienie, że globalna struktura systemu spełnia wymagania Projektowanie: Zapewnienie, że poszczególne moduły działają poprawnie i wydajnie
Wizualizacja
Architektura: Często przedstawiana za pomocą diagramów UML, takich jak diagramy komponentów czy wdrożenia Projektowanie: Realizowane przez diagramy klas, sekwencji, pokazujące jak dokładnie działa dany moduł
Kto się tym zajmuje
Architektura: Zazwyczaj doświadczeni inżynierowie lub architekci oprogramowania Projektowanie: Często implementowane przez zespoły programistów lub pojedynczych programistów
Elastyczność i refaktoryzacja
Architektura: Raczej stabilna, zmiany są trudne i kosztowne Projektowanie: Bardziej elastyczne, zmiany są łatwiejsze i dotyczą mniejszego obszaru
Proces tworzenia oprogramowania
W typowym procesie tworzenia oprogramowania:
- Najpierw definiujemy architekturę – podejmujemy kluczowe decyzje dotyczące całego systemu
- Następnie przechodzimy do projektowania – ustalamy szczegóły implementacyjne poszczególnych komponentów
- Na koniec przychodzi czas na implementację – pisanie kodu zgodnie z ustalonym projektem
Zarządzanie zmianami
Interesującą różnicą jest podejście do zmian:
Architektura: Zmiany na poziomie architektury są poważną sprawą i wymagają zgody wielu osób, ponieważ mogą wpłynąć na cały system.
Projektowanie: Zmiany na poziomie projektu są bardziej lokalne i łatwiejsze do wprowadzenia.
Praktyczny przykład
Wyobraźmy sobie, że tworzymy aplikację e-commerce:
Architektura określi:
- Czy będzie to aplikacja monolityczna czy mikroserwisowa
- Jakie główne komponenty będą potrzebne (koszyk, katalog produktów, system płatności)
- Jak te komponenty będą się komunikować
- Gdzie będą przechowywane dane
- Jak zapewnić skalowalność w czasie promocji
Projektowanie zajmie się:
- Jak dokładnie będzie działał koszyk (jakie klasy, metody)
- Jak implementować wyszukiwanie produktów
- Jak zorganizować kod systemu płatności
- Jak zaprojektować interfejs użytkownika dla procesu zamówienia