DDD Strategic Design (2-Days)

Some design decisions have an impact on the trajectory of the whole project. Modeling is most needed in complex circumstances, yet the typical dynamics of large projects too often derail it or disconnect it from the real design. This course delves into three principles for clarifying the big picture, getting effort focused on the core, and coordinating multi-team development.

This workshop combines lecture, simulation exercises, and discussion. (Optionally, a programming lab can be added to relate strategy to concrete implementation decisions.). The end of each day is a retrospective discussion bringing out the main points of the day’s experience and relating them to the earlier days and to the participants’ own work.

Prerequisites

Required

Experience with large-scale application development. Basic knowledge of object modeling and software system design.

Recommended

Advanced knowledge of modeling and design. Familiarity with design patterns.

Target Audience

Advanced developers, technical leaders and managers.

Course Outline

Day 1 Morning: Ubiquitous Language

  • Domain-driven design overview
  • Relating the model with team language (exercise)
  • Test-driven development (TDD) and test writing as a modeling process

 

Day 1 Afternoon: Context Mapping

  • Pragmatic approach to dealing with diverse models and designs on real projects
  • Relationships between subsystems/ relationships between teams

 

Day 2 Morning: Distillation

  • Distinguishing the Core Domain
  • Different strategies for Core and Generic Domains
  • Where to emphasize supple design

 

Day 2 Afternoon: Bringing it Together

Open discussion time will explore interconnections of these core techniques and delve into topics of concern for the participants. Some common topics include:

  • Making enterprise frameworks work for you
  • Problems of mixing domain logic with framework components such as Servlets and EJBs
  • How to limit coupling your design to the frameworks (making migration to later versions easier)
  • Making code easier to understand
  • Making code easier to test
  • When to use framework features and when to use POJOs
  • Avoiding becoming a "fashion victim"
  • writing tests at subsystem boundaries
  • identifying hotspots
  • writing tests at hotspots
  • writing translation layers

 

Preparation for a Private Class

In order to tune the class to the level and circumstances of the participants, we will have the team leader answer a few questions about the project's goals, history and processes.

Since it is essential that participants be free to discuss their real project challenges in the classroom, we make any needed nondisclosure agreements prior to the class.