Design Patterns
Design Patterns AP Catalog


A design pattern focuses on a particular software design problem or issue [Gamma 94]. It contains a detailed discussion of how this problem can be apportioned into a context which describes the circumstances under which the problem is applicable, and the individual motivating factors, or forces that need to be resolved. The design pattern then describes how these forces are either resolved or balanced within the scope of that context to provide a solution which then diverges into benefits, related solutions and remaining negative forces called consequences.

Where patterns generally assume a specific context where there are few, if any, pre-existing concerns which affect the design of a system, experience has demonstrated that situations with legacy and existing problems are much more commonplace in practice. In contrast, AntiPatterns, start with an existing "negative solution" or legacy approach, such as may be the result of a manager or developer’s ignorance or inexperience in solving a particular type of problem, or perhaps having applied a perfectly good design pattern in a wrong context. The AntiPattern then amplifies the negative solution in a way that helps organizations recognize and understand a problematic situation, its symptoms, and its ultimate consequences. The AntiPattern then presents a common solution that refactors the system to maximize benefits and minimize consequences.

Fig2.gif (33046 bytes)

AntiPatterns are based on a rhetorical structure that differs from simple patterns. AntiPatterns begin with a compelling, problematic solution. From this solution, a discussion of the root causes records how the problematic solution is the result of incorrectly resolving the forces for a specific underlying set of problems within its context. This convergence from a concrete situation to the more abstract underlying forces is a key component in communicating an understanding of how and why the problem exists. This abstraction is composed of symptoms and as consequences, similar to the context and forces of a design pattern, but which clearly documents the implications of the problematic solution. The documented symptoms can then be critical cues used in the diagnosis and recognition of a specific problematic solution, or, AntiPattern. Finally, once an AntiPattern has been correctly identified, it’s refactored solution can be used to obtain a better convergence of the underlying forces to lead you to a better understanding of the problem and an effective method of resolving the problematic solution.

AntiPatterns are therefore a natural extension to design patterns. Rather than codifying pure computer science, AntiPatterns focus instead on the wide and ever-growing selection of repeated software failures in an attempt to understand, prevent and recover from them. To the developer, AntiPatterns are a new tool that bridge the gap between architectural concepts and real-world implementations. They are used to illustrate the key common, critical problems faced by most software developers and share the wisdom learnable from other developers’ experiences. Only with an understanding of the causes and motivations of an AntiPattern can developers ensure that such negative solutions are not continually repeated within an organization.

Home Up Next

Copyright 1999 William Brown, Raphael Malveau, Hays McCormick, Thomas Mowbray, and Scott W. Thomas.  All rights reserved.
For problems or questions regarding this web contact [Web Master].
Last updated: January 25, 2000