20 October 2014

I have engaged over the last week and a half in giving presentations on Domain-Driven Design.  The first was at the Denver Domain-Driven Design Meetup group and was focused on using NServiceBus to implement Domain-Driven Design in .NET.  This is an eclectic group with a mix of technology stacks, including Rubyists, Java developers, .NET folks, Javascript enthusiasts, and more.  The second was at Denver Dev Day, an event at the Microsoft Denver offices with a more homongenous group of .NET developers, but with the majority not previously having had any exposure to Domain-Driven Design or Eric Evans or Udi Dahan at all.  I will be giving yet another DDD presentation in a week from the time of writing at the October meeting of the Denver Visual Studio User Group.  This is also for developers mostly focused on the Microsoft stack and I’m pretty certain there will be limits here, as well, on the experience of the audience with the concepts involved in Domain-Driven Design.

The approach I have taken to these presentations is to give a little bit of background on what it means to use DDD with some definitions of terms and some of the names of the important people in the DDD world, followed by some demonstration using .NET to illustrate the principles of Bounded Contexts, Ubiquitous Language, and Aggregates with a sample (start of an) implementation of a sample domain in C# using the fabulous NServiceBus infrastructure libraries from Particular Software.

The sample domain was not really something I selected – it came from a modeling exercise done in the Denver Domain-Driven Design Meetup group that I just carried forward and made more concrete and used it as a sample for demonstrating an approach to Domain-Driven Design, mostly modeled after Udi Dahan’s ideas about Service Oriented Architecture.  This sample domain was a library that loans media items.  In the DDD Denver Group, we called it a “Public Library” domain.  I used the name “Media Loan Library” because I didn’t want to put constraints on it being run by a governmental organization and to instead have it represent a library that could be operated by any organization.  I also wanted to make clear that the media loaned by a library are not limited to books.

The code I wrote for and used in the presentations is available via github.  I used multiple repositories to demonstrate the partitioning of a complex domain into subdomains and the division and autonomy desirable among those different pieces of the system.  This also, ideally, reflects the structure of the teams working on the different pieces of the system.  You can find the code repositories here:

https://github.com/raelyard/Loans.git
https://github.com/raelyard/Loans.PublicEvents.git
https://github.com/raelyard/Fines.git
https://github.com/raelyard/Fines.PublicEvents.git

The presentation slides are also available and they are here:

Denver Domain-Driven Design Meetup Group Presentation - NServiceBus and DDD
Denver Dev Day Presentation – DDD @ DDD
(I will update this with a link to the Denver Visual Studio User Group slides when I have them available for download)
Denver Visual Studio User Group



blog comments powered by Disqus