Domain-Driven Design dla .NET Core. Jak rozwiązywać złożone problemy podczas projektowania architektury aplikacji - ebook
Domain-Driven Design dla .NET Core. Jak rozwiązywać złożone problemy podczas projektowania architektury aplikacji - ebook
Wdrożenie zasad projektowania dziedzinowego (DDD) jest szansą na uzyskanie doskonałych wyników projektowania oprogramowania dla złożonych wymagań biznesowych. Aby podejście DDD ujawniło swoje zalety, konieczne jest zrozumienie potrzeb użytkowników i zidentyfikowanie właściwych problemów do rozwiązania. Dopiero potem można przystąpić do budowania modeli. Zaangażowanie zainteresowanych stron biznesowych w ten proces nie zawsze jednak przebiega efektywnie. Konieczne jest zrozumienie natury modeli dziedzinowych opartych na zachowaniu oraz tego, jaką rolę odgrywają one w budowie zwinnych i zmodularyzowanych systemów.
Dzięki tej książce zrozumiesz praktyczne znaczenie złożoności dziedziny i behawioralnych aspektów języka dziedzinowego. Poznasz podstawowe zasady DDD i nauczysz się używać takich narzędzi jak EventStorming, Event Sourcing i CQRS. Dowiesz się, jak stosuje się DDD do różnych stylów architektonicznych, takich jak REST, systemy reaktywne i mikrousługi. Nauczysz się pracować we frameworku .NET Core 2.2, aby przetłumaczyć modele dziedzinowe na wykonywalny kod C#, oraz Vue.js, aby zbudować frontend aplikacji. Nie zabrakło tutaj również zagadnień refaktoryzacji kodu, numerowania wersji zdarzeń i migracji. W rezultacie poszczególne zespoły w organizacji będą mogły pracować elastyczniej i efektywniej dzięki ulepszonym usługom i oddzielonym interakcjom.
W książce między innymi:
- angażowanie interesariuszy biznesowych do rozwiązywania złożoności dziedziny
- koncepcja kontekstu ograniczonego i agregatu
- projektowanie modeli tymczasowych na podstawie zachowania
- wzorzec CQRS i modele odczytu wykorzystujące rzutowania
- jednokierunkowy przepływ interfejsu użytkownika w Vue.js
- praktyczne stosowanie zasad projektowania dziedzinowego
Programowanie dziedzinowe: tak się trafia w sedno potrzeb!
Spis treści
O autorze 11
O recenzentach 13
Przedmowa 15
Rozdział 1. Dlaczego projektowanie dziedzinowe? 19
- Zrozumieć problem 20
- Przestrzeń problemu i przestrzeń rozwiązania 20
- Co poszło nie tak z wymaganiami? 22
- Jak radzić sobie ze złożonością? 23
- Rodzaje złożoności 23
- Klasyfikowanie złożoności 26
- Podejmowanie decyzji i błędy poznawcze 29
- Wiedza 32
- Wiedza dziedzinowa 32
- Unikanie ignorancji 34
- Podsumowanie 36
- Dalsza lektura 36
Rozdział 2. Język i kontekst 37
- Język wszechobecny 37
- Język dziedzinowy 38
- Wyraźne określanie rzeczy dorozumianych 41
- Język i kontekst 47
- Podsumowanie 51
Rozdział 3. EventStorming 53
- EventStorming 54
- Język modelowania 55
- Wizualizacja 57
- Porady dotyczące organizowania warsztatów EventStorming 58
- Kogo zaprosić? 58
- Przygotowanie przestrzeni 59
- Warsztaty 61
- Nasz pierwszy model 68
- Podsumowanie 73
- Dalsza lektura 74
Rozdział 4. Projektowanie modelu 75
- Model dziedziny 75
- Co reprezentuje model? 76
- Anemiczny model dziedziny 77
- Co należy uwzględnić w modelu dziedziny? 78
- EventStorming na poziomie projektu 82
- Poszerzanie wiedzy 82
- Przygotowanie do warsztatów 83
- Notacja rozszerzona 83
- Modelowanie dziedziny referencyjnej 88
- Podsumowanie 91
- Dalsza lektura 92
Rozdział 5. Implementacja modelu 93
- Wymagania techniczne 93
- Rozpoczęcie implementacji 94
- Tworzenie projektów 94
- Framework 95
- Przełożenie modelu na kod 96
- Encje 97
- Dodawanie zachowania 100
- Zapewnianie poprawności 101
- Ograniczenia dla wartości wejściowych 102
- Obiekty wartości 103
- Zdarzenia dziedzinowe w kodzie 127
- Zdarzenia dziedzinowe jako obiekty 128
- Generowanie zdarzeń 131
- Zdarzenia zmieniają stan 134
- Podsumowanie 139
Rozdział 6. Działanie za pomocą poleceń 141
- Wymagania techniczne 141
- Otoczenie modelu dziedziny 142
- Udostępnianie internetowego interfejsu API 142
- Warstwa aplikacji 149
- Obsługa poleceń 152
- Wzorzec procedury obsługi poleceń 152
- Usługa aplikacji 156
- Podsumowanie 165
Rozdział 7. Granica spójności 167
- Wymagania techniczne 167
- Spójność modelu dziedziny 168
- Granice transakcji 168
- Wzorzec Agregat 173
- Ochrona niezmienników 181
- Analiza ograniczeń dla polecenia 182
- Egzekwowanie reguł 189
- Encje wewnątrz agregatu 192
- Podsumowanie 201
Rozdział 8. Utrwalanie agregatów 203
- Wymagania techniczne 203
- Utrwalanie agregatów 204
- Repozytorium i jednostki pracy 204
- Implementacja dla RavenDB 206
- Implementacja Entity Framework Core 221
- Podsumowanie 232
Rozdział 9. CQRS - strona odczytu 233
- Wymagania techniczne 234
- Dodawanie profilów użytkowników 234
- Zagadnienia dotyczące dziedziny profilu użytkownika 235
- Strona aplikacji dla profilu użytkownika 242
- Strona zapytań 250
- CQRS i konflikt między odczytami a zapisami 250
- Zapytania i modele odczytu 252
- Implementowanie zapytań 254
- API zapytań 254
- Implementacja zapytań dla RavenDB 257
- Implementacja zapytań dla frameworku encji 264
- Podsumowanie 270
Rozdział 10. Event Sourcing 271
- Wymagania techniczne 272
- Dlaczego Event Sourcing 273
- Problemy z utrwalaniem stanu 273
- Czym jest Event Sourcing? 277
- Event Sourcing wokół nas 278
- Agregaty pozyskiwane ze zdarzeń 279
- Strumienie zdarzeń 279
- Magazyny zdarzeń 281
- Utrwalanie oparte na zdarzeniach 283
- Podsumowanie 299
- Dalsza lektura 300
Rozdział 11. Rzutowania i kwerendy 303
- Zdarzenia i zapytania 304
- Budowanie modeli odczytu na podstawie zdarzeń 305
- Rzutowania 306
- Subskrypcje 308
- Implementacja rzutowań 311
- Subskrypcje nadganiające 311
- Rzutowania międzyagregatowe 320
- Rzutowanie zdarzeń z dwóch agregatów 321
- Wzbogacanie modeli odczytu 331
- Kwerendowanie w rzutowaniach 332
- Konwertowanie zdarzeń 335
- Magazyn trwały 340
- Punkty kontrolne 340
- Utrwalanie modeli odczytu 344
- Zakończenie 349
- Podsumowanie 353
Rozdział 12. Kontekst ograniczony 355
- Pułapka pojedynczego modelu 356
- Zaczynaj od rzeczy małych 356
- Znowu złożoność 357
- Wielka kula błota 359
- Konstruowanie systemów 363
- Granice językowe 364
- Autonomia zespołu 369
- Podsumowanie 373
Rozdział 13. Podział systemu 375
- Kiedy, co i jak? 375
- Kiedy dzielić? 376
- Co dzielić? 378
- Jak podzielić? 380
- Różne spojrzenia na projektowanie systemów 382
- Proces projektowania 383
- Dzielenie encji 387
- Budowa systemu modułowego 387
- Moduły wewnątrz jednego rozwiązania 389
- Struktura modułu 392
- Budowanie systemu 403
- Podłączanie modułów do aplikacji 404
- Integracja 405
- Interfejs użytkownika 412
- Interfejs użytkownika ponad granicami 413
- Mikrousługi 417
- Kiedy nie stosować systemów rozproszonych 418
- Jak stosować systemy rozproszone 419
- Podsumowanie 422
- Dalsza lektura 423
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-7766-0 |
Rozmiar pliku: | 8,9 MB |