CSC/ECE 517 Fall 2009/wiki3 1 co: Difference between revisions
Line 17: | Line 17: | ||
== Considerations When Writing Anti-Patterns == | == Considerations When Writing Anti-Patterns == | ||
When writing patterns, there are various templates to from which to choose, for example, the pattern template from the Gang of Four's Design Pattern book: | |||
* Pattern Name and Classification | |||
* Intent | |||
* Also Known As | |||
* Motivation | |||
* Applicability | |||
* Structure | |||
* Participants | |||
* Collaboration | |||
* Consequences | |||
* Implementation | |||
* Sample Code | |||
* Known Uses | |||
* Related Patterns | |||
Brown et al in their book [http://www.amazon.com/exec/obidos/ASIN/0471197130/theantipatterngr AntiPatterns] suggest 3 different possible templates for writing anti-patterns: | |||
* Pseudo-AntiPattern Template: Only the name and problem are described | |||
* Mini-AntiPattern Template: Includes the name, AntiPattern Problems, and Refactored Solution | |||
* Full AntiPattern Template: Includes 18 different sections such as Root Causes, Background, Known Exceptions, and Examples. | |||
For the purposes of brevity, this wiki page will use the Mini-AntiPattern Template form with the addition of an Example section. | |||
== Anti-Pattern Examples == | == Anti-Pattern Examples == |
Revision as of 22:39, 17 November 2009
Software Design Anti-Patterns
Not all patterns are good. Anti-patterns are patterns that initially seem effective, but over time you learn that they lead you into traps. - Scott Klement, Anti-Patterns: Avoid the Programming Dark Side
In this article, we will describe several software design patterns which have been categorized as "anti patterns": Programming approaches which are not uncommon and which can lead to poor program design and performance.
What are Anti-Patterns?
Different texts define the term anti-patterns in different ways:
- "An AntiPatern is a literary form that describes a commonly occurring solution to a problem that generates decidedly negative consequences." - AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis
- "Anti-patterns are patterns that initially seem effective, but over time you learn that they lead you into traps." - Anti-Patterns: Avoid the Programming Dark Side
- Over the last decade we have witnessed the maturity of both best practices...and worst practices (as manifested in the anti-patterns movement...). - Patterns of Anti-Patterns?, Journal of Object Technology
In each definition, the implementer of the anti-pattern is trying to solve a problem in a common way, however the common way is a bad design that can lead to unintended consequences. Some of the reasons cited in the AntiPatterns book as to why these anti-patterns have been used include: Haste, sloth (or laziness), ignorance, apathy, and pride. Studying anti-patterns can at least help assist the potential anti-pattern implementer in the ignorance category.
Considerations When Writing Anti-Patterns
When writing patterns, there are various templates to from which to choose, for example, the pattern template from the Gang of Four's Design Pattern book:
- Pattern Name and Classification
- Intent
- Also Known As
- Motivation
- Applicability
- Structure
- Participants
- Collaboration
- Consequences
- Implementation
- Sample Code
- Known Uses
- Related Patterns
Brown et al in their book AntiPatterns suggest 3 different possible templates for writing anti-patterns:
- Pseudo-AntiPattern Template: Only the name and problem are described
- Mini-AntiPattern Template: Includes the name, AntiPattern Problems, and Refactored Solution
- Full AntiPattern Template: Includes 18 different sections such as Root Causes, Background, Known Exceptions, and Examples.
For the purposes of brevity, this wiki page will use the Mini-AntiPattern Template form with the addition of an Example section.
Anti-Pattern Examples
text
The Blob or God Class
Anti-Pattern Problem
text
Refactored Solution
text
Example
text
Lava Flow
Anti-Pattern Problem
text
Refactored Solution
text
Example
text
Poltergeists
Anti-Pattern Problem
text
Refactored Solution
text
Example
text
Golden Hammer
Anti-Pattern Problem
text
Refactored Solution
text
Example
text
Spaghetti Code
Anti-Pattern Problem
text
Refactored Solution
text
Example
text
Cut-and-Paste Programming
Anti-Pattern Problem
text
Refactored Solution
text
Example
text
Conclusion
text
References
- www.antipatterns.com
- W. J. Brown et al., AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis, John Wiley & Sons, Inc., New York, NY, 1998.
- S. Klement, Anti-Patterns: Avoid the Programming Dark Side, 2008
- Wikipedia entry: Anti-pattern
- Anti Patterns Catalog offered by Cunningham & Cunningham, Inc.
- What is an AntiPattern? from Sourcemaking.com
- Anti-Patterns and Worst Practices – You’re Doing it Wrong!
- M. H. Dodani,Patterns of Anti-Patterns?, Journal of Object Technology, Vol 5, No 6, pp 29-33, 2006
- E. Gamma et al,Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley Professional, 1994.
- G. Meszaros and J. Doble, A Pattern Language for Pattern Writing.