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

Beitrag lesen

Tach!

Und das ich deine Antwort nicht nett finde liegt wahrscheinlich daran, dass du sehr viel in mein System hineininterpretierst was du jedoch gar nicht wissen kannst. Und nein dass muss man nicht machen nur weil der andere wenig über sein System erzählt.

Der Mangel an Fakten begünstigt aber sehr, dass die Gedanken in eine Richtung abschweifen, die von dir nicht gewünscht ist. Wer sollte es objektiv verdenken? Abgesehen davon kann man natürlich immer noch absichtlich oder versehentlich in die "falsche" Richtung antworten.

Aber vielleicht ist das die Erkenntnis das man nicht strikt gegen etwas sein kann sondern immer den Anwendungsfall sehen muss.

Mein Reden, schon seit langer Zeit. Manche scheinen das nicht zu mögen, die hätten gern eine klare Linie statt sich situationsabhängig durch Leben zu schlängeln.

Ein Defaultwert ist für mich essenziell wichtig. [...]
Vorteil: [...]

  • weniger Exception Behandlungen

Das scheint mir eine sehr allgemeine und nicht zutreffende Aussage zu sein. Aber vielleicht gehst du von anderen Voraussetzungen aus als ich. Es ist doch letzlich egal, wo ein Wert herkommt. Wenn er falsch ist, muss er behandelt werden. Gerade wenn du die Default-Werte auswärts lagerst ist die Gefahr einer Änderung in unzulässiger Weise höher als wenn der Wert im Code steht.

Nachteil:

  • Objekte laufen mit Defaultwerten, auch wenn man das nicht möchte...

Du meinst aus der Sicht des Anwenders? Nun, sein Problem, Hauptsache ich habs angemessen dokumentiert und nicht vorsätzlich was eingebaut. Er kann ja auch absichtlich was falsch einstellen.

Die Cookie Klasse würde in Auszügen bei mir so aussehen

class cCookie

{
   $intCookieLifetimeDays = cSystem::init()->getCookieLifetime();
   public function getCookieLifetime()
   {
      return $this->intCookieLifetimeDays;
   }

public function setCookieLifetime($intCookieLifetimeDays)
   {
       $this->intCookieLifetimeDays = $intCookieLifetimeDays
   }
}

  
Ich finde das ja Overkill, wenn man sich Getter und Setter baut, die nichts weiter als eine 1:1 Variablen-Kapslung sind. Leider kennt PHP keine Propertys à la C#. Die sehen nach außen hin wie einfache Objektvariablen aus und im einfachsten Anwendungsfall ist nur wenig mehr als eine Variablendeklaration zu notieren:  
  
  typ name { get; set; }  
  
Fertig. Man könnte mit einer einfachen Objektvariable (unter C# Field genannt) anfangen und sie bei Bedarf zu einer Property umbauen (ohne dass sich der Code an den Verwendungsstellen ändern müsste) - YAGNI lässt grüßen - aber wenn es einem C# so einfach macht ... Später kann man bei Bedarf immer noch die Methoden ausbauen. Aber auch PHP hat Tricks auf Lager, die jedoch etwas umständlich zu implementieren sind und damit aufwendiger zu verstehen sind. Man fängt mit einer einfachen Objektvariablen an, und wenn man nie mehr als 1:1-Zugriff braucht, spart man sich Funktionsaufrufe. Will man den Getter oder Setter ausbauen, macht man die Variable private und regelt den Zugriff über [Property Overloading](http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members). In \_\_get()/\_\_set() ruft man die zur Variable gehörenden privaten Zugriffs-Methoden auf. Der Verwender hat weiterhin die Einfachheit eines Variablenzugriffs.  
  

> OOP hin, Martin Fowler her, du kannst es nennen wie du willst, aber ich stehe auf mein Gott-Singleton. Und wenn mein Chef irgendwann mal möchte, dass es anders heißt, dann werde ich deinen Chef dazu anstiften dein Depency Injektion Verwaltungsobjekt anders zu benennen.  
  
Ein einfaches Umbenennen geht vielleicht noch mit Suchen und Ersetzen, solange keine Laufzeit-Tricks à la variable Variablen mitspielen. Das Wechseln zu einem anderen Framework wäre eher eine Herausforderung.  
  
  
Nebenbei:  
  

> `new cCookie();`{:.language-php}  
  
Das c steht für Class? Wenn ja, warum haben deine Methodennamen keinen solchen Präfix? Wenn Variablen einen Typ-Präfix bekommen, welchen bekommt dann $foo im folgenden Beispiel - $intFoo?  
  
  $intFoo = strpos('heuhaufen', 'nadel');  
  
Und wäre dann  
  
  if ($intFoo === false)  
    // nicht gefunden  
  
nicht etwas seltsam? ($mixedFoo fände ich auch nicht sinnvoll, weil solch eine Typenangabe gleich gar keine nützliche Information mehr liefert.)  
  
  
dedlfix.