Lean Architecture and DCI
If you’re a programmer using the most popular programming languages today, it’s likely that you’ve never done object-oriented programming. Oh, sure, you’ve done abstract data types and maybe even used inheritance, but it’s likely that you’re a class-oriented programmer. If you’re a Java or C# programmer you think in classes and write classes. You can’t write an object, or even express the running program structure, in Java. And you write lots of tests to compensate for the obscurity of the code.
Object-oriented programming goes beyond the local concern of abstract data types to conceptualize networks of communicating objects. Alan Kay — who coined the term — envisioned that object orientation could link the many concepts of our own mental models with the world around us. To him, objects were all about turning our operational models — problem-solving strategies and algorithms — into code. The intelligence isn’t in the local ADTs — they're just barely smart Data. It is rather in Contextualized business-level use cases in which Data interact in a directly expressed way. The main components are Data, Context and Interaction: DCI.
DCI builds on time-proven ideas from domain analysis with an architectural shearing layer between long-term stable code (the Data) and rapidly deployed features (the Contexts). It combines planning with just-in-time feature delivery, and directly supports humane computer interface designs. DCI can naturally be used in Ruby and most “scripting" languages, and even in C++. Recent research establishes that DCI improves code correctness and greatly reduces context-switching during software development.
Suggested pre-reading: http://fulloo.info/Documents/trygve/trygve1.html (esp. section 6)