implementowanie czystej architektury w pythonie full.pdf

(5200 KB) Pobierz
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym
powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi
ich właścicieli. Autor oraz wydawca dołożyli wszelkich starań, by zawarte w tej książce informacje
były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie,
ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz
wydawca nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe
z wykorzystania informacji zawartych w książce.
Redaktorzy prowadzący: Grzegorz Krzystek, Szymon Szwajger
Projekt okładki: Studio Gravite / Olsztyn
Obarek, Pokoński, Pazdrijowski, Zaprucki
Helion S.A.
ul. Kościuszki 1c, 44-100 Gliwice
tel. 32 231 22 19, 32 230 98 63
e-mail:
helion@helion.pl
WWW:
http://helion.pl
(księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/imczar
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
ISBN: 978-83-283-8686-0
Copyright © Helion S.A. 2022
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
Lubię to! » Nasza społeczność
SPIS TREŚCI
1.
WPROWADZENIE
1.1. Era narzędzi
1.2. Dla kogo jest ta książka?
1.3. Co znajdziesz w książce?
11
11
13
13
2.
PODSTAWY CZYSTEJ ARCHITEKTURY
2.1. Po co to wszystko?
2.2. System płytki kontra system głęboki
2.2.1. CRUD, czyli system płytki
2.2.2. System głęboki
2.3. Założenia czystej architektury
2.3.1. Niezależność od frameworków
2.3.2. Wysoka testowalność
2.3.3. Niezależność od API i interfejsu użytkownika
2.3.4. Niezależność od bazy danych
2.3.5. Niezależność od firm trzecich
2.3.6. Elastyczność
2.3.7. Rozszerzalność
2.4. Warstwy, czyli horyzontalna organizacja kodu
2.4.1.
Świat
zewnętrzny
2.4.2. Infrastruktura
2.4.3. Aplikacja
2.4.4. Domena
2.4.5. Zasada zależności
2.4.6. Granice
2.5. Podsumowanie
15
15
16
16
17
20
20
20
20
21
21
21
21
22
22
23
23
24
26
26
29
3
Kup książkę
Poleć książkę
IMPLEMENTOWANIE CZYSTEJ ARCHITEKTURY W PYTHONIE
3.
WZORCOWA IMPLEMENTACJA
3.1.
3.2.
3.3.
3.4.
Oznajmienie
Przepływ sterowania w czystej architekturze
Wymagania biznesowe
Implementacja
3.4.1. Diagram sekwencji
3.4.2. Granica wejściowa (input boundary)
3.4.3. Granica wyjściowa (output boundary)
3.4.4. Prezenter (presenter)
3.4.5. Model widoku (view model)
3.4.6. Przypadek użycia (use case)
3.4.7. Interfejs dostępu do danych (data access interface)
3.4.8. Dostęp do danych (data access)
3.4.9. Encja oferty (bid)
3.4.10. Encja aukcji (auction)
3.5. Podsumowanie
30
30
30
31
33
33
33
34
34
36
36
38
38
38
39
40
4.
MODYFIKACJE CZYSTEJ ARCHITEKTURY
4.1. Dylemat prezentera
4.2. Pozbywamy się granicy wejściowej
4.3. Alternatywne podejścia do projektowania przypadków użycia
4.3.1. Fasada
4.3.2. Mediator pomiędzy wejściowym DTO a przypadkiem użycia
4.4. Użycie modeli bazodanowych jako encji
4.5. Podsumowanie
41
41
44
45
45
46
48
55
5.
WSTRZYKIWANIE ZALEŻNOŚCI
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
Czym są zależności?
Wszędobylskie abstrakcje i klasy
Abstrakcje w czystej architekturze
Odwrócenie sterowania a zależności
Kontener IoC kontra service locator
Wstrzykiwanie zależności kontra konfiguracja
Podsumowanie
57
57
58
61
64
66
68
68
6.
CQRS
6.1.
6.2.
6.3.
6.4.
Wstęp
Co to ma wspólnego z czystą architekturą?
Osobny stos odczytu — dlaczego?
Osobny stos odczytu — jak?
6.4.1. Zapytanie jako DTO
6.4.2. Zapytania jako osobne klasy
6.4.3. Fasada modelu do odczytu
70
70
72
73
74
75
76
77
4
Poleć książkę
Kup książkę
SPIS TREŚCI
6.5. CQRS kontra REST API
6.6. CQRS kontra GraphQL
6.7. Podsumowanie
78
79
81
7.
OSTRE GRANICE
7.1.
7.2.
7.3.
7.4.
7.5.
7.6.
Słowo o złożoności
Dwa
światy
Granica pomiędzy warstwą aplikacji a
światem
zewnętrznym
Pisanie wejściowego DTO
Value objects
Podsumowanie
82
82
84
85
85
86
89
8.
STUDIUM PRZYPADKU — PLATFORMA AUKCYJNA
8.1.
8.2.
8.3.
8.4.
Jak pracujemy?
Jak zacząć, czyli chodzący szkielet
Nasz chodzący szkielet
Przypadek użycia dla składania oferty na aukcji
8.4.1. Nazewnictwo
8.4.2. Argumenty
8.4.3. Wyjście
8.4.4. Testy
Encje aukcji i oferty
8.5.1. Nazewnictwo
8.5.2. Value objects jako identyfikatory
8.5.3. Implementacja
8.5.4. Testy jednostkowe
8.5.5. Implementacja — ciąg dalszy
Abstrakcyjne repozytorium
8.6.1. Nazewnictwo
8.6.2. Implementacja
Repozytorium
8.7.1. Nazewnictwo
8.7.2. Implementacja działająca w pamięci
8.7.3. Rozwijanie implementacji pod osłoną TDD
Kończymy przypadek użycia — składanie oferty
8.8.1. Wstrzykiwanie zależności
8.8.2. Sprawiamy,
że
pierwszy sensowny test przechodzi
8.8.3. Refaktoryzacja
Organizacja kodu
8.9.1. Jak można ułożyć kod w Pythonie?
8.9.2. Organizujemy kod projektu
8.9.3. Organizujemy kod warstwy infrastruktury
8.9.4.
Łączymy
wszystko razem w komponencie main
8.9.5. Wystawiamy API
90
90
91
93
94
94
94
95
96
97
97
98
98
99
100
101
102
102
102
102
103
103
105
105
105
106
107
107
108
110
112
116
8.5.
8.6.
8.7.
8.8.
8.9.
5
Kup książkę
Poleć książkę
Zgłoś jeśli naruszono regulamin