DDD+ES Study Map

This is a draft structure for the project we are planning to start in the field of DDD+ES guidance. It will start as a series of podcasts along this plan, followed by a deeper learning material afterwards (written guidance, new Lokad.CQRS samples and more interactive form of guidance).

This is going to be provided for free for a number of reasons.

Introduction

  1. Sad situation with education in practical software design
  2. Improving the situation - document theory and practices that have proven to work
  3. People and practices behind all that

Methodology

  1. 4 levels of approach to each aspect (top to bottom)
    1. Strategic - DDD
    2. Tactical - CQRS+ES
    3. .NET Practices a la - Lokad.CQRS
    4. Dirty things
  2. 4 types of material
    1. Append-only podcasts
    2. Living documentation
    3. Sample projects
    4. Forums, Q&A and community
  3. Targeting environment (applicability of this methodology)
    1. Startup mindset
    2. Value-oriented
    3. Limited resources
    4. Ability and desire to partially discard legacy things

Overview of strategic aspect - DDD

  1. DDD == strategic design guidance
    1. Importance of DDD
    2. The Blue book. How to read it?
  2. Core concepts
    1. Domain Model
    2. Bounded Context
    3. Context Map
    4. Ubiquitous Language

Overview of tactical aspect - CQRS+ES

  1. CQRS + ES == implementation detail
  2. Event sourcing
      1. Definition
      2. PROs and CONs
      3. Long-term effect on developmen
      4. Event Stores
      5. Specifications
  3. CQRS
    1. Projections and views
    2. Rebuilding
    3. Long-term effect on development

Important development principles

  1. Messaging
    1. Message vs. remote procedure call
    2. Messaging Patterns — ZMQ Guide
    3. Message queues
  2. Partitioning (Pat Helland)
  3. Eventual Consistency
  4. Cloud computing challenges
    1. Resources on-demand
    2. Volatile - repartitioning and downtimes
    3. At least once delivery

Core development practices

  1. Version control - git
  2. Unit testing
  3. Continuous integration
  4. Serialization
  5. Lowering development friction
  6. Rapid iterations
  7. Delaying decisions
  8. Keeping things simple and separate
  9. Maintenance
  10. Generally avoid:
    1. SQL and DTC
    2. IoC Containers

.NET Practices - Lokad.CQRS

  1. Definition
  2. Short history
  3. Core principles
    1. Simplicity and ability to understand
    2. Cross-cloud capabilities
    3. Embedded practical experience
    4. Not a framework
  4. Building Blocks
    1. Application Service
    2. Aggregate with event sourcing
      1. Implementing simple testing
      2. Self-documenting specifications
    3. View Projection
    4. Task
    5. Event Port
    6. Bounded Context definition
  5. Infrastructure Blocks
    1. Message contracts DSL
      1. Contract generation
      2. Interface stubs
    2. Messaging
      1. Simplicity and Portability
      2. Limited idempotency
      3. Retrial and quarantine operations
      4. Failure modes
    3. Document Storage
      1. Simplicity and portability
      2. Atomicity and concurrency
    4. Streaming Storage
      1. Simplicity and portability
      2. Large BLOB streaming operations
      3. Big data approaches
    5. Append-only storage
      1. Simplicity and portability
        1. File storage
        2. SQL Storage
        3. NoSQL Storage
          1. Azure Blob
          2. Amazon
      2. Performance
      3. Bitcask data model
      4. Failure modes
    6. Automated Projection management
      1. Event replays
      2. Projection code hashing
  6. Common Challanges

Dirty things

  1. Development Modeling
  2. Performance Optimizations
  3. Scaling
  4. Exception handling
  5. Debugging and logging
  6. Upgrades and Versioning
  7. Deployments
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License