Applied Domain-Driven Design i .NET
Kursen lär ut ett direkt, praktiskt sätt att närma sig arkitektur inom affärslivet. Fokus ligger på att producera affärsmjukvara som är mer användbar, testbar, och lättare att förvalta och förstå än konventionella sätt att bygga applikationer.
Med hjälp av Domän-Driven Design (DDD) och Command/Query Responsibility Segregation (CQRS) ser vi hur vi kan applicera moderna lärdomar på vår design, för att kunna bygga mer hållbara, skalbara, och testbara system till lägre totalkostnad.
Istället för att lära ut ett ramverk lär kursen ut en modern arkitektur, ett antal möjliga implementationer, och understryker de vanliga fallgroparna man kan undvika på vägen.
Det här är en praktisk kurs, och vi håller oss nära programkoden hela vägen. Under kursen bygger vi successivt upp en mindre applikation från grunden. Kursen täcker även testning, hur man applicerar nyckelinsikterna från kursen på existerande system, och hur man skalar ut ett system byggt med CQRS.
- .NET
- C#
Målgrupp
God kännedom om C# och grundläggande kunskaper i NUnit är en fördel, dock ej nödvändiga.
What you will learn
Dag 1
Utmaningen med "databasdriven" mjukvaruutveckling
- Olika sorters komplexitet
- Skalbarhet och konsistens
- Testning
- Integration
Introduktion till Domän-Driven Design
- Domäner och domänmodeller
- "Ubiquitous Language", ett gemensamt språk
- Övning i att bygga en domänmodell
Kontexter
- Varför avgränsningar är viktiga
- Kontextkartor
- Att hålla isär koncept i domänen
- Att mixa ihop koncept i gränssnittet
- Övningar på gränsletande
Kommandon, frågor och events
- Normalisering och denormalisering
- Skrivmodeller och läsmodeller
- Events som länk mellan skrivsida och lässida
- Eventuell konsistens och vad det innebär
- Design av kommandon
- Design av frågor
- Övning i design av kommandon och frågor
Meddelandebussar
- Meddelanden som frikoppling
- Publish/Subscribe
- Att "sända" vs att "publicera"
- Bygga en enkel meddelandebuss
- Övning i implementation av en meddelandebuss
Dag 2
Skrivsidearkitektur
- Kommandohanterare
- "State sourcing" gentemot "event sourcing"
- Introduktion till aggregat
- Att bygga upp aggregat från tidigare events
- Transaktionssäkerhet
- Övning i kommandohanterare och aggregat
BDD-testning
- Introduktion till BDD
- Kommandon, events och BDD
- Att bygga ett enkelt testramverk
- Övning i BDD
Eventdatabaser
- Existerande alternativ
- Att bygga en eventdatabas ovanpå en relationsdatabas
- Att implementera ett repository med hjälp av en eventdatabas
- FÖrdelar med att befria aggregatens representation från persistens
- Optimeringar med hjälp av snapshots
- Övning i att bygga en eventdatabas
Avancerad aggregatdesign
- Att hitta aggregatgränser
- Att hantera relationer
- Övning i aggregatdesign
Dag 3
Att bygga lässidor
- Övergripande angreppssätt
- Relationella databaser som lässida
- NoSQL-lässidor
- Andra alternativ
- Att rekonstruera och bygga upp nya lässidor
- Övning i att bygga lässidor
Processhanterare
- Vad är en processhanterare? Vad är en saga?
- Olika typer av processhanterare
- Att hantera processhanterarens tillstånd
- Att bygga ett enkelt ramverk för processhanterare
- Övning i processhanterare
Att utveckla ett system
- Att förfina domänmodeller
- Att hantera kommandon som evolverar
- Versionshantering av events
- Hantering av uppgradering av events
- Övning i event-uppgradering
CQRS, DDD och existerande kodbaser
- Att introducera kontexter i ett existerande system
- Separering av kommandon och frågor
- Att migrera mot event sourcing
Att skala ut
- Man kan dra nytta av läs/skriv-separationen för att skala
- Att skala skrivsidor enligt kontext och enligt aggregat
- Att skala inom ett aggregat
- Distribuering av meddelanden och tillförlitlighet
- Köer och "enterprise service busses"
Andra möjligheter
- Parallell utveckling och outsourcing
- Att återskapa tidigare tillstånd för debugging
Kursinformation
Lärare
Kontakta oss för mer information
040 61 70 720info@edument.se
Alla priser är exkl. moms