Functional Domain-Driven Design and Architecture
In this workshop you will learn how to think in the functional paradigm. This sets a foundation for continuing into application: Using Functional Programming (FP) principles and Domain-Driven Design (DDD) to effectively craft expressive and rich domain models. Raise this understanding to a higher level of abstraction and apply the principles to architecture.
FP has been around for 40 years. Even so, it required some 30 years before its popularity grew to applicability on the software industry beyond its academic roots where object-oriented technologies have dominated.
FP holds to these standards: functions are first-class citizens and provide predictable results; requires immutability to reduce risks associate with state transition; side-effects (or more simply, effects) are pushed to the edges of the service/application architecture leading to functional benefits there as well.
This workshop teaches you how to raise functional thinking to a higher level of abstraction for broad benefits across the architecture and domain model. See below for day-to-day details.
Register Now: November 29-December 1
3 Half-Day Sessions
- Understand Functional Programming concepts
- Introduction to Domain-Driven Design
- Learn how to designing rich domain models using immutable types and functions
- Learn how to decouple business logic from side effects
- Compose smaller pieces into bigger programs and systems
- Deep exploration of different architectural patterns that helps with designing functional systems such as CQRS, Event Sourcing, and Event-Driven Architecture.
Functional Programming and Domain-Driven Design
The first day builds your foundation of FP and DDD. Learn how to design immutability, referential transparency, and pure functions, including how to prevent effects and side effects. Gain a working knowledge of essential DDD, and how it is expressed with FP to solve real-world, complex problems.
- to benefit, prior understanding of functors, applicatives, and monads is not required
- What is functional programming?
- How do you think functionally when solving business problems?
- Strategic design
- Tactical design
- Discovering the domain using business events
- Learn with EventStorming by thinking in events to explore the business domain
- Model business solutions with immutable data records and pure functions
- Representing concepts with immutable types
- Modeling side-effect-free behaviors with functions
- Enforcing business invariants
- Preventing effects and side-effects
Day 2 adds to your foundational knowledge by featuring functional architecture patterns. This helps you understand how to build business-driven systems using FP principles to increase your success with complex domains.
- Pipes and Filters
- Functional Core
- CQRS and Event Sourcing
- Understanding relationships between Bounded Contexts
- Driving out purposeful services (i.e. microservices)
- Composing behaviors and buildinging workflows with functions
- Understanding subsystem relationships with Context Mapping
- Communicating between Bounded Contexts
- Applying Domain Events for message-driven integrations
- Designing DDD Open-Host Services, Published Languages, and Anticorruption Layers
Functional Architecture Implementation
The third day puts into practice the knowledge acquired in previous days. You will learn to design services end-to-end that are bug-free, using FP and DDD. You will broaden your skills to encompass multiple subsystems and build a fully functional system architecture.
Put into practice what you have already learned with this Hands-on FP and DDD Bounded Context implementation with F# and Kotlin.
- event sourced aggregate
- side-effect-free domain
- long-running workflow
- integrating bounded contexts