# Konvention vor Konfiguration

Konvention vor Konfiguration (englisch convention over configuration oder coding by convention) ist ein Softwaredesign-Paradigma, welches zum Ziel hat, die Komplexität von Konfigurationen zu reduzieren: Solange sich die Entwickler in allen Bereichen einer Software an übliche Konventionen (beispielsweise gleichartige Bezeichner) halten, müssen diese nicht konfiguriert werden, was somit die Konfigurationen erheblich vereinfacht, ohne die Möglichkeiten der Entwickler einzuschränken. Damit unterstützt das Paradigma auch die Prinzipien KISS und Don’t repeat yourself.
Bei der Verwendung dieses Ansatzes müssen Entwickler nur applikationsspezifische und unkonventionelle Aspekte einer Applikation konfigurieren. Andere Aspekte, wie beispielsweise die Verbindung von Eingabeelementen über die Fachmodelle bis zu Datenbanktabellen, können durch Konventionen wie beispielsweise die gleichartige Benennung der Klassen und Tabellen sichergestellt werden und müssen nur dann konfiguriert werden, wenn von den Konventionen abgewichen wird. Besagt beispielsweise die Konvention, dass eine Modellklasse im Singular und die dazugehörende Datenbank-Tabelle im Plural benannt werden soll, so muss der Entwickler keine explizite Konfiguration vornehmen, damit ein Programm mit der Modellklasse Sale die Tabelle sales verwendet. Heißt die Tabelle aber etwa products_sold, muss er dies konfigurieren.

## Ziele

Viele traditionelle Frameworks benötigten eine Reihe von Konfigurationsdateien, um projektspezifische Einstellungen vorzunehmen. Diese Einstellungen betrafen nicht nur globale Werte, sondern auch sich für viele Elemente der Applikation wiederholende Werte wie beispielsweise das Zuordnen von Klassen zu Datenbanktabellen. Mit der Größe und Komplexität einer Applikation stieg auch die Größe und Komplexität dieser Konfigurationsdateien, was wiederum die Wartbarkeit der Applikation reduzierte. Die Verwendung von Annotationen statt Konfigurationsdateien reduziert dieses Problem nicht, sondern verschiebt es nur.
Konvention vor Konfiguration reduziert genau diese sich oftmals strukturell wiederholenden Einträge in Konfigurationsdateien und Annotationen. Damit müssen die Entwickler nur mehr die hinter einem Framework liegenden Konventionen lernen und sich nicht mit einer Unmenge an Konfigurationen auseinandersetzen. Damit werden die Wartbarkeit der Applikation erhöht und somit die Gesamtkosten der Softwareentstehung und Wartung reduziert.

## Einsatz

Konvention vor Konfiguration wurde bereits verwendet, lange bevor der Begriff populär wurde. Ein frühes Beispiel ist die implizite Variablendeklaration von Fortran. Die JavaBeans-Spezifikation beruht ebenfalls stark darauf. Eine Reihe moderner Frameworks verwenden das Paradigma, um ihre Konfigurationen zu vereinfachen. Dazu zählen unter anderen die Frameworks Spring, Ruby on Rails, Grails, Zend Framework, CakePHP, Laravel und Symfony sowie jüngere Build-Werkzeuge wie Apache Maven und Gradle.

## Verwandte Prinzipien

* Don’t repeat yourself – ein zu Konvention vor Konfiguration passendes Prinzip der Softwareentwicklung
* KISS-Prinzip – ein weiteres zu Konvention vor Konfiguration passendes Prinzip der Softwareentwicklung