I swear. Sometimes I think certain software architects must have a dartboard, each segment containing a design pattern, you know, Adapter here, Observer there, Factory over there. When it comes time to design something, they throw a dart.
“Ooh, Memento!”

Like you, I'm a fan of classic Gang of Four design patterns. But all too often it seems like architects pick their design patterns out of a hat. "Hmm, I've never used Visitor before, let's try that." You could call it dartboard-driven design. Just pick your pattern and go!
When Kent Beck, Ward Cunningham, Jim Coplien, and the Go4 started identifying and codifying programming patterns some years back, probably not what they intended.
Design patterns were an application of the architectural theories of Christopher Alexander to the domain of programming, and Christopher Alexander is a seriously Roarkian kind of dude, and patterns in this sense are a Roarkian abstraction: a way of coalescing the ideal form of a piece of software according to its precise function. We can connect the dots from Ayn Rand's / Howard Roark's famous and universal statement of design, circa 1943...
Here are my rules: what can be done with one substance must never be done with another. No two materials are alike. No two sites on earth are alike. No two buildings have the same purpose. The purpose, the site, the material determine the shape. Nothing can be reasonable or beautiful unless its made by one central idea, and the idea sets every detail. A building is alive, like a man.
...all the way to the modern school of object-oriented, pattern-based software development, circa 2009. The problem is that these pesky design dartboarders have poisoned the well, to such an extent that some developers have sworn off patterns entirely. Unfortunately, because [insert cheesy end-of-post conclusion here] design patterns promote software health.
(No, seriously. I just want a Design Patterns Dartboard for my wall. Entire point of this post. Thanks for reading and let me know.)
Posted by James Devlin 27 comment(s)



