Details zum E-Book

Domain-Driven Design dla .NET Core. Jak rozwiązywać złożone problemy podczas projektowania architektury aplikacji

Domain-Driven Design dla .NET Core. Jak rozwiązywać złożone problemy podczas projektowania architektury aplikacji

Alexey Zimarev

E-book

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!


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
  • Titel: Domain-Driven Design dla .NET Core. Jak rozwiązywać złożone problemy podczas projektowania architektury aplikacji
  • Autor: Alexey Zimarev
  • Originaler Titel: Hands-On Domain-Driven Design with .NET Core: Tackling complexity in the heart of software by putting DDD principles into practice
  • Übersetzung: Lech Lachowski
  • ISBN: 978-83-283-7766-0, 9788328377660
  • Veröffentlichungsdatum: 2021-07-19
  • Format: E-book
  • Artikelkennung: praddd
  • Verleger: Helion