Where are we?
We have now spent quite a lot of time discussing and applying the basics of DDD. We have written many unit tests, designed our Domain Model carefully, and made the Domain Model persistent with an O/R Mapper. What's left?
A story about a well-known industry leader in a multinational company goes like this. He held a meeting after the company's profits, quality, and so on were better than ever before and said something like: "Now I want all of us to spend one minute thinking how good we are..." A minute later he recommenced, taking up problems, criticizing, and so on. It was business as usual.
After we have thought nice thoughts about ourselves for a minute, what do we need to focus on now?
Of course, there are dozens of things to consider. First of all, we are by no means done with even the basics of the Domain Model, let alone the details. But we have started out nicely, and we are also in good shape for taking on problems such as performance characteristics, concurrency issues, security, and so on. I will actually leave all this as an exercise for you, the reader, because I hope your appetite has been whetted so you are forced to give it a try on your own if you haven't before.
Instead, in this Chapter I will start with a short discussion about how you can scale up the DDD principles used so far, mostly by focusing on the Bounded Context pattern [Evans DDD]. After that we will discuss three different design techniques that I think are worth looking at today. They are Service Orientation, Inversion of Control/Dependency Injection, and Aspect Orientation.
I asked a couple of my friends to write about those design techniques, and we have their contributions here, but I penned the first section in this chapter myself. Over to "Context is King."