Are you "lean" already? Do you do "lean" architecture? Is your approach "lean" enough?
No, I didn’t lose my mind yet - I’m just trying to accustom myself to the new buzzword: "lean" is a new "agile" :)
If you don’t have any clue about what I’m writing about, you should probably start here:
or go straight for DCI (Data-Context-Interaction):
http://www.infoq.com/presentations/The-DCI-Architecture (be warned, this video is approx. 1 hour long)
If you’re not much into link surfin’, here’s what all this is about:
OO (object-oriented) paradigm is a lie. It doesn’t really represent most intuitive mental model people use. Instead: code should be separated into rapidly changing system behavior (DCI people say "what system does") and slowly changing domain model (DCI people say "what system is"). Those both should not be combined in one class abstract (that is typical for OO design).
This idea (DCI) was invented by Trygve Reenskaug (creator of MVC) during his work on role-based modeling. He came up with separating:
- Data - static domain model with relations (but w/o transactions!)
- Context - use case (responsible for identifying and creating object map that plays the “roles” during use case)
- Interaction - roles (played by objects at run time - in use case) that represent stateless collections of responsibilities
Sounds a bit weird - doesn’t it? What is worse, it’s hard to explain and illustrate - one of the best examples available are made in Scala (mainly due to the fact that Scala natively provides traits (http://en.wikipedia.org/wiki/Traits_(computer_science)). Is it really a game changer? Does it simplify / improve anything? I haven’t made my opinion yet, but I’m sure I’ll keep investigating that closely.