Czysta architektura Flashcards
Czym cechuje się paradygmat funkcyjny?
- wymusza dyscyplinę bezpośredniego przekazania sterowania (direct transfer)
- kod zawierający funkcje, pętle, if/else if/else
Czym cechuje się paradygmat obiektowy?
- wymusza dyscyplinę pośredniego przekazania sterowania (indirect transfer)
- zlikwidował koniecznośc stosowania wskaźników na funkcje dzięki mechanizmowi polimorfizmu
Co oznacza pośrednie przekazanie sterowania w paradygmacie obiektowym?
Wywołane odpowiedniej funkcji wirtualnej jest obsługiwane przez mechanizm polimorfizmu. Poprzez wskaźnik na funkcję wywoływana jest odpowiednia funkcja
Czym cechuje się paradygmat funkcyjny?
Wymusza dyscyplinę podczas przypisywania wartości (wartości nie mogą się zmienić)
Jak paradygmat funkcyjny wspiera używanie współbieżności?
Brak możliwości zmiany wartości zmiennych powoduje brak zakleszczeń, warunków wyścigu, sekcji krytycznych i innych
Co to Segregation of mutability?
Podział aplikacji na komponenty zmienne i niezmienne. Komponenty niezmienne wykonują swoje zadania w sposób całkowicie funkcyjny. Komunikują się z komponentami zmiennymi, które dokonują zmian zmiennych
Więcej czy mniej kodu w komponentach funkcyjnych?
Radzone jest umieszczać jak najwięcej pracy w komponentach niemodyfikujących zmienne i jednocześnie redukować ilość kodu umieszczanego w komponentach, w których jest to dozwolone
Co to Event Sourcing?
Przechowywanie wszystkich zmian stanu zamiast stanu. Sprzyja to paradygmatowi funkcyjnemu. Na przykład zamiast przechowywać obecny stan konta, można przechowywać wszystkie transakcje, których suma da posiadaną kwotę.
Jakie są konsekwencje stosowania paradygmatów programowania?
- każdy nakłada na programistę jakąś dodatkową dyscyplinę
- mówią czego nie robić
- każdy paradygmat coś zabiera (np.: goto, wskaźniki na funkcje, przypisania)
Czemu dowodzą testy?
Testami dowodzi się niepoprawności programu, a zatem dowodzimy poprawności poprzez porażki w próbach dowiedzenie niepoprawności
Charakterystyka Single Responsibility Principle
Każdy moduł powinien odpowiadać (mieć powód do zmiany) tylko przed jednym aktorem
Aktor symbolizuje daną grupę ludzi np.: użytkownicy, udziałowcy)
Przykład: klasa Emplyee z funkcją save (dla bazy danych) i reportHours (dla dziau HR). Interface tej klasy jest zbyt szeroki bo korzysta z niego dwóch aktorów.
Czym staje się Single Responsibility Principle na poziomie komponentu?
Common Closure Principle
Czym staje się Single Responsibility Principle na poziomie architektury?
Axis of Change
Charakterystyka Open Closed Principle
- element oprogramowania powinien być otwarty na rozbudowę, ale zamknięty na modyfikację
- jeżeli komponent A ma być chroniony przed zmianami wprowadzanymi w komponencie B, to komponent B powinien zależeć od komponentu A. Zależność oznacza, że komponent B używa interface komponentu A
- można osiągnąć stosując Single Responsibility Principle i Dependency Inversion Principle
Charakterystyka Liskov Substitution Principle
- kod używający interfejsu może być parametryzowany dowolną klasą implementującą ten interfejs
- zachowania specyficzne dla klasy pochodnej zamykać w implementacji interfejsu dzięki czemu uniknie się hardkodowania corner case’ów