The artima.com site has a great set of interviews with Eric Gamma. The one focusing on "Flexibility and Reuse" is particularly insiteful. I recently took over an application project that had floundered. One of the issues was the completeness and complexity of a custom framework they were building as part of the project.Eric rightfully points out the draw back to the framework approach:
When we started exploring frameworks years ago, we had big hopes for them. We thought the way to create software was to build high-level, domain-specific frameworks, and then you just customize them and reuse all the design that is codified into them. That was the reuse nirvana. Since then, I've gotten a little more realistic, because I have learned that it's hard to create highly reusable frameworks. They become complex, hard to learn, and even harder to maintain. I was on both the framework consumer and the framework producer side, and it can be hard from either perspective....patterns offer reuse in a way that is less risky than frameworks. Building a framework is high risk and a significant investment. Patterns allow you to reuse design ideas and concepts independent of concrete code.The first thing I did was scrap the framework and rework the architecture with the team using well worn patterns where appropriate. This has definitely helped us to improve the situation and get back on track for delivery of the product.