Convention over Configuration Begriffserklärung

3. Dezember 2010

Die meisten Frameworks benötigen eine umfangreiche Konfiguration um zu funktionieren. Für Entwickler ohne ausreichende Erfahrung kommt es hierbei häufig zu Verständnisproblemen. Die Hürde für den Einstieg muss genommen werden und nicht selten verzweifelt manch einer und stoppt das Projekt "Neues Framework evaluieren" mit dem Fazit: unbrauchbar.

Natürlich versuchen viele Frameworks deshalb den Einstieg so leicht wie möglich zu machen und nehmen Standardwerte für die meisten Einstellungen an. Diese können bei Bedarf vom Entwickler punktuell oder komplett angepasst werden.

Kunde_1[6] Kunde_2[3]
Dieses Problem existiert genauso in Bezug auf Nutzung von Framework Komponenten. Hier muss ein Interface ausimplementiert, dort ein Property mit einem passenden Wert versehen werden. Um diesen Problemen zu begegnen, setzen mittlerweile einige Frameworks auf "Convention over Configuration". Ein Vorgehen, bei welchem das Framework gewisse Annahmen trifft, welche bei Bedarf vom Entwickler genutzt werden können. So abstrakt diese Aussage klingt, so einfach lässt sich das Ganze an einem Beispiel beschreiben: Geht man von einem Framework für Objektpersistenz (z.B. Entity Framework) aus, so erwartet dieses für alle zu speichernden Objekte eine eindeutige Id. Diese wird zur Identifizierung der Objekte genutzt. Hierzu muss zuerst eine Konfiguration erstellt werden, welche dem Entity Framework für jeden Typen das identifizierende Property aufzeigt. Das kann über ein Attribut erfolgen, XML Konfiguration, eine externe Mapping-Klasse, etc. Am Beispiel eines Kundenobjekts (Abbildung 1) muss das Property Kundennummer konfiguriert werden. Da diese Mapping-Konfiguration für jeden Typen erfolgen muss, steigt der Aufwand proportional mit der Größe der Solution. Es stellt sich die Frage, ob hierfür nicht eine Konvention genutzt werden kann. Diese gibt vor, dass falls ein Objekt eine Property mit Namen ID enthält, diese automatisch als Identifier angenommen wird, ohne dass eine extra Konfiguration notwendig ist (Abbildung 2). Der Entwickler muss somit dafür sorgen, dass seine Objekte alle das Property ID haben.

Zugegebenermaßen klingt das ein wenig nach Gängelung. Was, wenn wir einen Composite Key, also Eindeutigkeit über mehrere Felder haben. Wenn also eher mit fachlichen Schlüsseln zur Identifikation gearbeitet wird? Auch wenn ein Surrogate Key (technischer Schlüssel) die empfohlene Vorgehensweise darstellt, kommen die fachlichen Schlüsselkombinationen in freier Wildbahn häufig vor. Hierfür können explizite Mappings definiert werden, welche dann Priorität genießen. Spezialisierung vor Allgemein, sozusagen. Der entscheidende Punkt ist hierbei, dass Konventionen allgemeine Annahmen darstellen, welche – wenn notwendig – angepasst werden können.

Nachdem die Begrifflichkeit "Convention over Configuration" hiermit erläutert wurde, folgen in einem der nächsten Einträge konkrete Konventionen im Feature CTP 4 Release des neuen Entity Frameworks.