CSC/ECE 517 Fall 2009/wiki2 12 PatternClassification

From Expertiza_Wiki
Revision as of 15:43, 14 October 2009 by Cybo (talk | contribs)
Jump to navigation Jump to search

Introduction

Patterns are often classified into creational, structural, and behavioral categories. However, this leaves a large number of patterns in each group, with no easy way of remembering all of them. What classifications and strategies have been developed to help programmers remember patterns, so that they can apply them at opportune moments?

This article is intended for users who are familiar with patterns and have used them before. It is not intended to familiarize the reader with the concept of a design pattern. If interested in learning what design patterns are please refer to Design Pattern

Definition

A pattern is a solution to a problem in its context. A context is specific to the domain in which the problem is being solved. For example, in computer science software engineers often are surrounded by problems in similar contexts such as web and database infrastructure. Within these contexts there are repeatable solutions. Those solutions when described abstractly are are what we call patterns. A pattern in itself is not a finished solution to a problem but rather a template on how to solve a given problem which can arise in a variety of different situations (contexts)[1]

The goal of patterns is to recognize and make use of a library of knowledge that can be used to solve problems. Often times, the same problems are 're-solved' without learning from the past experiences. As long as we similar contexts we will have patterns or knowledge that develop from those solved problems.

Example

The company you work for decides to switch a different database vendor which in turn requires you to change the interface for a set of objects in the software you designed. It turns out that the change of interface is a common problem not just for the databases but in general in software development. In this case you would use a Adapter pattern in the context of database development.

Problem

The problem with patterns is classification and recognition or usage, i.e. what type of patterns to use for each given case. For example, a pattern that is not classified correctly will not be remembered and used. Several attempts to classify patterns has been made. The existing software classification of patterns uses the categories of:

  1. Structural
  2. Behavioral
  3. Creational

While these are good starting points for patterns, it is very hard to make use of this information in different contexts.

Existing Work

The Gang of Four patterns are the most famous. They are classified according to creational, structural and behavioral characteristics. There is also a J2EE catalog of patterns by SUN. These are all classified as J2EE patterns but they can be split into presentation, business, and integration tier patterns.

There is a good presentation regarding pattern classification by Imed Hammouda and Jakub Rudzki. In the presentation they suggest that patterns can be classifed by:

  1. Domain
  2. Paradigm
  3. Granularity
  4. Purpose
  5. Scope
  6. Discipline

For example, here is how domain classification can help make patterns more useful

Domain

Domain specific classification may help make patterns more useful in various contexts. This is because they solution to the problem will be more specific to the context. Here are some examples of where domain specific classification was used:

Examples

  1. User Interface
  2. Information Visualization
  3. Computer Security
  4. Web Applications

For example, when building a webapp it is useful to use the Model-View-Controller pattern to organize access and control to and from the domain data. This pattern is structural. However, if a novice developer was to start building a webapp from scratch, would they turn to the literature on MVC to start their webapp architecture?

The answer to this rhetorical question is no. A novice would not use MVC because it is too difficult to understand 'how' MVC applies to their context, webapps. This is a failure of patterns and the existing pattern classification scheme. For software patterns to be more recognizeable and useful for the average developer, the specific context (domain) should be explicitly described. For example, the context of webapps the MVC solution is very different than the context in GUI applications. Although the same pattern can be used in both, the problems are solved differently. Thus we actually say MVC is a schema and not a pattern.

Links

References

[1]Design Pattern