Table of Contents Previous Section Next Section

2.8 AntiPatterns

Another development in the software development community that complements design patterns is called AntiPatterns. An AntiPattern is a literary form that describes a solution to a commonly occurring problem that generates negative consequences. It is similar to software design patterns except that it typically includes additional information regarding the context in which the solution is best applicable and the symptoms that assist in recognizing the potential need for applying the solution. An AntiPattern describes a general form of the problematic situation before the solution is applied, the primary causes that lead to the general form of the situation, symptoms describing how to recognize the general form of the situation in a specific context, the consequences of the existing situation, the solution that addresses the problem, and the refactored situation that incorporates the solution. Typically, for software design issues, an AntiPattern much more thoroughly documents the problem part of a design pattern that addresses the same issue, contains a similar solution to a design pattern, and provides some additional discussion of the resulting situation after the solution part of the design pattern is applied.

At a high level, an AntiPattern provides a solution pair, an undesirable solution discussed in its general form, and a refactored solution created after applying the suggested remedies. These solutions differ slightly from the problem-solution pairing of software design patterns (Figure 2.15). An AntiPattern starts with a problematic solution. The solution exists as a result of various contextual forces described in the typical causes part of the AntiPattern. The general form of the AntiPattern solution leads to various kinds of symptoms and consequences, and the consequences can often be quite devastating. The AntiPattern proceeds to define a potential solution for migrating the problematic solution to a refactored solution providing improved benefits. AntiPatterns are fundamentally about software refactoring. Refactoring is modification to software to improve its structure or quality. Common examples of AntiPatterns include stovepipe systems, spaghetti code, and analysis paralysis. AntiPatterns are further explained in AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis [Brown 1998], and AntiPatterns catalogs are contained in Software Architecture: Organizational Principles and Patterns [Dikel 2001], Antipatterns in Project Management [Brown 2000], J2EE Antipatterns [Dudney 2003], and AntiPatterns and Patterns in Software Configuration Management [Brown 1999].

Figure 2.15. AntiPatterns

graphics/02fig15a.gif

    Table of Contents Previous Section Next Section