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.

  1. "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".
  2. "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.