CSC/ECE 517 Fall 2009/wiki3 1 co: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 42: Line 42:
== Anti-Pattern Examples ==
== Anti-Pattern Examples ==


text
This section presents six anti-patterns from the book '''[http://www.amazon.com/exec/obidos/ASIN/0471197130/theantipatterngr AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis]'''.


=== The Blob ''or'' God Class ===
=== The Blob ''or'' God Class ===


==== Anti-Pattern Problem ====
==== Anti-Pattern Problem ====
text
A design which includes a class that has the majority of attributes and/or methods in the system could a sign of the Blob anti-pattern. According to Brown et al, this anti-pattern could be the result of using a procedural design in an object-oriented language, and therefore imbuing one of the classes with the majority of the methods and seeing that class as a "controller" class. Another sign that the Blob anti-pattern may be present is if a class is designated as a "utility" class, and there


==== Refactored Solution ====
==== Refactored Solution ====

Revision as of 00:53, 18 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:

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

This section presents six anti-patterns from the book AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis.

The Blob or God Class

Anti-Pattern Problem

A design which includes a class that has the majority of attributes and/or methods in the system could a sign of the Blob anti-pattern. According to Brown et al, this anti-pattern could be the result of using a procedural design in an object-oriented language, and therefore imbuing one of the classes with the majority of the methods and seeing that class as a "controller" class. Another sign that the Blob anti-pattern may be present is if a class is designated as a "utility" class, and there

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