Responsibility-Driven Design References
Over the last ten years many people have adopted Test-Driven Development, Refactoring and Continuous Integration but often the problems with inflexible and overcomplicated software stem from more basic problems in object-oriented design. There seems to be very little interest in helping people improve these fundamentals.
This is sad because much is known about this and plenty can be done to help people fix the software. I’ve had quite a bit of success using RRC sessions (Roles, Responsibilities and Collaborators) technique. This comes from the Responsibility-Driven Design school of thinking and is something that the original XP team used.
Many people can:
- recite, parrot-fashion object-oriented principles,
- use those principles to criticise code, and
- create designs by force-fitting design patterns from a book.
Not so many people can:
- start with some simple, concrete user stories and build a minimal yet flexible object model,
- take an existing system and a new user story, generate multiple possible solutions and find a minimal yet flexible solution,
- build an object model incrementally, gradually building towards some patterns and away from others, and
- … do the above in a team with other people some of whom aren’t so experienced in design.
The Object Design book makes the case that design is a learned skill rather than something innate. This begs the question how can we train people to be better designers? and what exercises would help?
The (updated) book:
Object Design, Rebecca Wirfs-Brock and Alan McKean, Addison-Wesley, 2002, ISBN 0201379430
Key Papers:
- The object-oriented brewery: a comparison of two object-oriented development methods, Robert C. Sharble and Samuel S.Cohen, ACM SIGSOFT Software Engineering Notes, 18(2), pp. 60 – 73, 1993 — A comparative study of two teams, one of which uses responsibility-driven design. Designs from both teams are compared using metrics and the RDD team wins.
- A Laboratory for Teaching Object-Oriented Thinking, Kent Beck and Ward Cunningham, pp.1 – 6, Proceedings of OOPSLA, 1989 — Using CRC (now called RRC) as a means of teaching object-oriented design.
- Object-Oriented Design: A Responsibility-Driven Approach, Rebecca Wirfs-Brock and Brian Wilkerson, pp.71 –75, Proceedings of OOPSLA, 1989 — Amongst other things has an example of interfaces shown built from abstract data types and then again using responsibility-driven design.
- A CRC Description of HotDraw — Ward Cunningham and Kent Beck’s example design using CRC cards.
See also:
- Eight Object-Oriented Design Tips — My attempt to summarise the most important things about effective object-oriented design.
- A Not Very Groovy Design Problem — Users of responsibility-driven design won’t like this abuse of meta-programming.
- Object Evisceration: a tail of two dogs, Lance Walton, 2006 — What happens when people program objects without object-oriented design thinking.