Wednesday, September 4, 2013

Bridges to Somewhere: Design Patterns wikis

So there's a bit of infrastructure that's critical but somewhat neglected because of more pressing problems. As the list of more pressing problems gets shorter (that's successful engineering - happy dance!) tending to this piece of infrastructure becomes more pressing.
 
Let's call this piece of infrastructure AbInitoWidget (AIW).
 
The grand vision is to get rid of AIW. Fold its functionality into a different piece of infrastructure. Let's call this other piece of infrastructure InitioWidget (IW). IW has had heapings of engineering cycles dedicated to it and is in much better shape.
 
Alas, the path to the grand vision of folding AIW into IW is long and fraught with peril. The kind of peril that requires the expertise you'd really only find in the original authors/devs. Without that kind of expertise each break/fix cycle will take much longer as the current devs reverse engineer the intent of whatever code path they're tasked with fixing.
 
Don't get me wrong, I too am seduced by the idea that IW could operate ex-nihilo. It's a self-referential beauty that any Computer Science geek would love. But the costs are so high that it's wise to adopt a fallback strategy (or 3) in the event that the grand vision does not come to pass.
 
While discussing one fallback strategy, moving the care and feeding of AIW from BadErrorProneHardToDiagnoseAIWCareAndFeeder (BadCareAndFeeder for short) to the care and feeder responsible for IW (GoodCareAndFeeder), I found myself thinking through design patterns that might help.
 
The first that came to mind was the Bridge pattern. Since we'd like to change AIW from being maintained by BadCareAndFeeder to GoodCareAndFeeder this struck me as being visually like a bridge. This is incorrect. The bridge pattern decouples abstraction from implementation so that both can evolve independently. While it may be involved in the the Bad-to-Good-CareAndFeeder migration project it doesn't actually capture what I was looking for - a higher level abstraction than the classical Gang-of-Four Design Patterns.

Fortunately Wikipedia has wonderful sections on design patterns. Two of my favorites are:
  1. The wiki for the foundational Gang-of-Four book "Design Patterns: Elements of Reusable Object-Oriented Software"
  2. The "Computer Science Design Patterns" wikibook.
    1. Not quite as polished as GoF.

No comments :

Post a Comment