views:

219

answers:

5

The Holy Grail of programming is to solve a problem once and make continual reuse of that solution forevermore. And, yet, despite my best efforts I find that I am often reworking familiar problems. So GoF design patterns aside, there have been several times that I've designed calendaring, content management, and person/organization address books to name only a few.

I'd like to know if there are any good resources (books, websites, whatever) where I could peruse common high-level business designs. I do realize that the requirements between my project and any pattern I might discover will differ, but I do expect the heart of the matter would remain the same, that there would be a lot of hard-won experience from which to draw. Plus, as geekish as this is, I simply enjoy reading about the process and the rationale behind the decisions from which designs emerge. I love it when shops, startups, and coders are transparent about their designs. (e.g. 37Signals, Garret Dimon)

This post touches on the subject and calls these high-level design patterns "Functional Design Patterns", but I'm not sure that's the common term used for what I'm describing. A search on "Functional Design Patterns" didn't turn up much. I also searched on "Domain-Specific Design Patterns" and "Data Model Design Patterns", the latter provided an interesting result so maybe this is more on target. By what term do you know what I'm trying to describe? Any good resources? Any other shops/coders who transparently showcase their emerging designs?

+2  A: 

If you haven't heard of the Hillside Group, the Pattern Languages of Programs events, or the books that have come out of this effort, I would start there. I have been nothing but happy about this effort.

D.Shawley
+2  A: 

Have you had a look at data modeling, in-particular the conceptual schema?

I think you've got to be mindful of what can realistically achieve with such abstract patterns. The more abstract a pattern is the less implementation detail it can provide. The devil is in the detail - therefore abstract patterns still leave work to be done.

I don't believe there is a single solution that could address all possible problems. From a pragmatic stand point I would argue that it's more useful to investigate methods for managing complexity rather than patterns which can address every single problem.

Benedict Cohen
A: 

I found the following - not sure as to how relevant they'll to you :)

Book commonly referenced:
- Design Patterns by Gamma, Helm, Johnson and Vlissides (Addison Wesley Longman, 1995. ISBN 0-201-63361-2)

warren
A: 

I also think about Analysis Pattern.

I believe it came reading Martin Fowler. (Google shows me my memory was right...)

KLE
A: 

Thank you, all, for the feedback. I was aware of the low-level design patterns common to a programmer's toolbox and I had visited Hillside Group in the past. I will spend more time there.

As I investigate further, I think the design patterns I'm after are closely related to data modeling. I am reworking a calendaring data model I threw together and due to emerging requirements some of the enhancements/fixes were a bit awkward. Unfortunately, as design goes, sometimes I have to head far enough down a path, let the requirements emerge, backtrack a bit, and then remodel based on shortcomings discovered from experience. From my experience, the data model plays a huge role in determining not only the elegance of the system, but also its UI.

I'll stay posted for other resources that are recommended.

Mario