mrjerk: Konfiguration, OOP² oder doch nur Rad² ?

Beitrag lesen

Hallo Tom,
Bin mir nicht sicher, ob ich Dein Problem richtig verstanden habe.

Prinzipiell gobt es das Prinzip der Konvention über Konfiguration, welches im Kern besagt, dass man im Idealfall nur die Sachen konfigurieren muss, die man anders haben will, als der angenommene "Default-Fall" es vorsieht.
Dies entspräche also Deiner Idee, eine Klasse bei initialisierung ihre eigene Konfiguration erzeugen zu lassen.

Ich weiß nicht, ob es hierfür schon Standard-Mechanismen gibt (zumal ich auch nicht genau wusste, auf welche Programmiersprache Du Dich beziehst, ich tippe mal auf PHP?).

Wenn Du selber sowas bauen willst, würde ich mir vielleicht mal die Entwurfsmuster Fabrikmethode bzw. Abstrakte Fabrik anschauen - damit könntest Du Dir z.b. "Konfigurationsfabriken" bauen, die je nach Modul, für das die Konfiguration benötigt wird, eigene Konfigurations-Klassen erzeugen können.

In der Regel braucht man zwar keine verschiedenden Konfigurationsklassen (da man meistens eh nur an Key/Value-Paaren interessiert ist), es kann aber hilfreich sein, um sicher zu stellen, dass bestimmte Werte durch die Konfiguration auf jeden Fall bereit gestellt werden:

  
# Beispiel: Datenbank-Konfiguration  
public abstract class AbstrConfigFactory {  
   public static abstract function getInstance();  
   public abstract function createConfiguration();  
}  
public class DatabaseConfig () {  
   public __construct ($host, $port, $user, $password,...)  
   public function getHost () {...}  
   public function getPort () {...}  
   public function getUser () {...}  
   public function getPassword () {...}  
   ...  
}  
  
public class DatabaseConfigFactory extends AbstrConfigFactory () {  
   private $instance = null;  
   public static function getInstance () {  
      if ($this->instance == null) {  
          $this->instance = new DatabaseConfigFactory();  
      }  
      return($this->instance);  
   }  
   public function createConfiguration () {  
        # Lade Konfigurationsdaten, z.b. von einem File  
        $configHash =  ...  
       return (new DatabaseConfig ($configHash['host'], $configHash['port']...);  
   }  
}  
  
#Verwendung:  
public class FancyWebApplication {  
   #...that needs a database :)  
   public __construct ($databaseConfig) {  
      mysql_connect ($databaseConfig->getHost(), $databaseConfig->getPort()...);  
   ...  
}  
$databaseConfig = DatabaseConfigurationFactory.getInstance().createConfiguration();  
$webApplication = new FancyWebApplication ($databaseConfig);  
  

Wenn nun etwas geändert werden muss, z.b. weil nun die Konfiguraionswerte für die DB-Konfig anders heissen soll, so muss nur die Methode "getConfigutation" bzw. "loadConfiguration" in der "DatabaseConfigFactory" modifiziert werden.

Soweit von mir, hoffe da ist irgendwas brauchbares dabei :)

Viele Grüße,
Jörg