Design Patterns - Falmouth-Games-Academy/comp350-research-journal GitHub Wiki
Design Patterns
A design pattern is the re-usable form of a solution to a design problem. The main field it was introduced into was architecture by Christopher Alexander 1(http://ocw.knu.edu.tw/sysdata/doc/1/1b24102d69091f2d/pdf.pdf), but has now been adapted for other fields most notably computer science 2(https://www.amazon.co.uk/Design-patterns-elements-reusable-object-oriented/dp/0201633612).
Anti Patterns
An anti-pattern is a common response to a problem that is ineffective and actually risks being counterproductive 3(http://www.dim.uchile.cl/~juaperez/beto/otro.bueno.pdf) 4(http://www.engr.sjsu.edu/fayad/current.courses/cmpe203-fall2013/docs/Lecture-B5/XXX-processPatterns.pdf).
According to the authors of Design Patterns there must be at least two key elements present to say for sure than anti-pattern is indeed an anti-pattern and not just a bad habit.
- "A commonly used process, structure, or pattern of action that despite initially appearing to be an appropriate and effective response to a problem, has more bad consequences than good".
- "Another solution exists that is documented, repeatable, and proven to be effective."
This is very similar to accidental complexity for example a developer making a problem for themselves by using a commonly used process that seems appropriate.
Examples
Software Design
Abstraction Inversion - Not exposing implemented functionality required by callers of a function/method/constructor so that the calling code awkwardly re-implements the same functionality.
Ambiguous Viewpoint
Big ball of mud
Database-as-IPC
Gold plating
Inner-platform effect
Input kludge
Interface bloat
Magic push button
Race Hazard
Stovepipe system
Inside out
[1] Alexander, Christopher (1977). A Pattern Language: Towns, Buildings, Construction. Oxford University Press. ISBN 0-19-501919-9.
[2] Gamma, Helm, Johnson & Vlissides (1994). Design Patterns (the Gang of Four book). Addison-Wesley. ISBN 0-201-63361-2. (Note: there is debate about whether the "Gang of Four" book actually contains any patterns in the Alexandrian's sense.)
[3] Budgen, D. (2003). Software design. Harlow, Eng.: Addison-Wesley. p. 225. ISBN 0-201-72219-4.
[4] Scott W. Ambler (1998). Process patterns: building large-scale systems using object technology. Cambridge, UK: Cambridge University Press. p. 4. ISBN 0-521-64568-9.
[5] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA.