Menu
Jim Coplien

Building DCI Systems on a DDD foundation

with Jim Coplien


Register for DDDEU 2017

Abstract

DDD has traditionally focused on the statics of system architecture and as such has been a boon to software maintainers managing maintenance costs. However, domain analysis techniques broadly have been light on advice on structuring the most important revenue-generating system structure: that of its user stories and use cases. This is particularly true for object-oriented systems, where features traditionally cut across architectural units. As a consequence, we rarely find the revenue-generating concerns of a system elaborated as architectural artefacts. Because these areas tend to be the loci of frequent change, they become difficult to evolve and accelerate system entropy in feature-rich businesses.

Trygve Reenskaug (inventor of MVC) and Jim Coplien (of Multi-paradigm Design fame) have created a design paradigm called Data-Context-and-Interaction (DCI) that restores the “form of function” to modern architectures. The approach carefully weaves the “what-the-system-is” forms well-known to DDD practitioners with new “what-the-system-does” forms that are the traditional focus of analysts and the business. The approach is faithful to object-oriented design principles even to the extent that it restores much of the original Alan Kay vision of object-orientation that was lost in the mid-1980s. The tutorial builds a conceptual overview as a foundation, but we will look at real code.

Requirements

This course focuses on professional architects and software implementers who have at least 3 years of experience doing software design and implementation. Technology-savvy analysts can also benefit greatly from the course. It is important that attendees be conversant with object-oriented design and that they have experience with a conventional object-oriented programming language (C++, C#, Java, Ruby, …) A background in DDD is a big plus but is not necessary, as is also true for depth of experience with MVC, with use cases, and software reflection.