Frage

Ich habe eine allgemeine Frage nach Umfang und Verkapselung. Nehmen Sie zwei Szenarien:

Szenario 1:

// a global application level constant
public static const IS_DEMO_MODE:Boolean = false;   

... // somewhere deep in the codebase

private function _myFunction():void
{
    if (IS_DEMO_MODE == true) {
      // If Demo Mode do not allow this function to complete
      return;       
    }
    else {
       // Function behaves normally
       // Code ...
    }

}

Szenario 2:

// a global application level constant
public static const IS_DEMO_MODE:Boolean = false;   

... // somewhere deep in the codebase

 // call the function and pass in the constant
_myFunction(IS_DEMO_MODE);


private function _myFunction(isDemoMode:Boolean):void
{
    if (isDemoMode == true) {
      // If Demo Mode do not allow this function to complete
      return;       
    }
    else {
       // Function behaves normally
       // Code ...
    }

}

Funktional gesprochen diese beiden Code-Snippets exakt das gleiche gleiche tun. Ich versuche, die Feinheiten der Codierung Stil zu verstehen und warum eine Art und Weise könnte über die andere bevorzugt werden? Es scheint, dass Szenario 2 ist besser von einer Verkapselung Sicht. Aber Szenario 1 ist in narrensicher, dass der boolean, die in den bedingten ist kommt von einem Ort nur, die globalen Konstante. Sie müssen nicht über einen Funktionsaufruf befürchten, dass bei der korrekten Ausführung eines Parameters Empfang in den falschen Wert passieren könnte. Aber Szenario 2 scheint der Mühe wert, weil man die Abhängigkeit der Konstante entfernen und kann die Funktion dynamischer verhalten. Irgendwelche Gedanken dazu? Gibt es noch andere Abwägungen ich über bin auf der Suche?

Das gleiche Konzept und Frage angewendet, um Objekte und Klassen. Aber ich stelle nur das Beispiel in Form einer Funktion zur Vereinfachung des Codebeispiels.

War es hilfreich?

Lösung

Im zweiten Ansatz können Sie _myFunction in einem separaten Modul leben machen, ohne Abhängigkeit von dem global man - so ist es einfacher zu testen, leichter wieder zu verwenden, und helfen Sie, Ihre Abhängigkeitsgraphen steuern, die oft ein ernstes Problem wird in großem Codebases. Wenn Sie Abhängigkeiten einfügen könnte man leicht vermeiden, sind Sie nur die Abhängigkeit-Diagramm Problem noch schlimmer machen, und nur sehr wenige potentielle Nutzen könnte jemals möglicherweise dafür bezahlen.

Tatsächlich, diese Art von Vorteilen zu gewinnen, eine große Abhängigkeit Muster explizit Objekt einzuspritzen, die sonst schaffen würde (in der Regel unerwünscht und unerwünschte) Abhängigkeiten zwischen den Modulen - siehe hier für einen Start. Als Fanatiker der Prüfung, loser Kopplung und Wiederverwendung, ich bin auch allmählich einen Fanatiker der Dependency Injection werden, so würde ich es als Argument nicht im Traum eine globale Konstante für den Zugriff auf, wo eine offensichtliche Alternative ist vorbei ...; - ).

Andere Tipps

2 wäre vorzuziehen, wenn Sie die gleiche Übersetzungseinheit verknüpft werden gegen beide Versionen (vor allem als gemeinsam genutzte Bibliothek in einem global festen Pfad) wollte, oder wenn Sie mehrere Instanzen in demselben Prozess lief. Andernfalls, wenn Sie in einer Situation sind, wo von der Quelle alles wieder aufzubauen kein Hindernis ist, # 1 ist besser.

Einige Dinge sind wirklich global. Globale Konstanten sind nicht gefährlich überhaupt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top