The Software-Pattern.org site offers a structured catalog of common Software Design and Architectural Patterns as well as Refactorings. The goal of the catalog is to provide an entry point to learn more about software patterns. Each pattern is stored with short description, some details and external links. The user can browse the catalog by searching for a pattern or listing the patterns of a given category, book or author.


The web application is developed by Rico Suter using ASP.NET MVC. Currently, the editing of the catalog is not public. If you would like to help creating the catalog, please contact me.

What is a Software Design Pattern?

In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. A design pattern is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Patterns that imply object-orientation or, more generally, mutable state, are not as applicable in functional programming languages.

What is a Refactoring?

Code refactoring is the process of restructuring existing computer code – changing the factoring – without changing its external behavior. Refactoring improves nonfunctional attributes of the software. Advantages include improved code readability and reduced complexity to improve source code maintainability, and create a more expressive internal architecture or object model to improve extensibility. Typically, refactoring applies a series of standardised basic micro-refactorings, each of which is (usually) a tiny change in a computer program's source code that either preserves the behaviour of the software, or at least does not modify its conformance to functional requirements.