Helion


Szczegóły ebooka

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

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

  • Tytuł: Domain-Driven Design dla .NET Core. Jak rozwiązywać złożone problemy podczas projektowania architektury aplikacji
  • Autor: Alexey Zimarev
  • Tytuł oryginału: Hands-On Domain-Driven Design with .NET Core: Tackling complexity in the heart of software by putting DDD principles into practice
  • Tłumaczenie: Lech Lachowski
  • ISBN książki drukowanej: 978-83-283-7765-3, 9788328377653
  • Data wydania książki drukowanej: 2021-07-19
  • ISBN Ebooka: 978-83-283-7766-0, 9788328377660
  • Data wydania ebooka: 2021-07-19
  • Format: 168x237
  • Identyfikator pozycji: praddd
  • Wydawca: Helion