Software architecture vs software design – jaka jest różnica?

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:

  1. Najpierw definiujemy architekturę – podejmujemy kluczowe decyzje dotyczące całego systemu
  2. Następnie przechodzimy do projektowania – ustalamy szczegóły implementacyjne poszczególnych komponentów
  3. 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
Scroll to Top