Array als Klasseneigenschaft?

9

Ich habe diese API, die erfordert, dass ich einen bestimmten Array-Schlüssel zum Senden habe. Da dieses Array für ALLE Klassenmethoden verwendet werden muss, dachte ich über das Setzen als Klasseneigenschaft nach.

%Vor%

Später, zu den Methoden dieser Klasse, werde ich dann verwenden:

%Vor%

(wobei "Aktion" der Schlüssel ist, der an diese API gesendet werden muss);

Ist das in Ordnung? Ich habe nicht genug OOP vor meinen Augen gesehen, deshalb frage ich das.

Wie gewünscht, hier sind weitere Informationen über die API:

%Vor%

Vielen Dank, MEM

    
MEM 15.10.2010, 11:41
quelle

1 Antwort

7

Theorie

Zuerst ein bisschen Hintergrund. Objekte bestehen aus "Zustand" (Felder - in PHP werden diese normalerweise "Eigenschaften" genannt, aber ich werde diesen Begriff auf eine andere Weise verwenden) und "Verhalten" (Methoden). Der Status ist ein wichtiger Teil der Kapselung : Er lässt Daten so lange persistieren, wie ein Objekt existiert und lässt die Daten in mehreren Funktionen sichtbar sein. Sie verwenden Objektfelder, wenn Sie Daten benötigen, um diese beiden Attribute zu haben. Diese Attribute sind Beispiele für zwei sehr wichtige Eigenschaften: Zugänglichkeit (ähnlich dem variablen Bereich ) und Speicherdauer. Diskussionen umfassen normalerweise den Umfang und die Dauer von Variablen (die Namen mit Daten assoziieren), aber hier konzentrieren wir uns auf Daten.

Accessibility legt fest, wann und wo die Daten per Code zugänglich sind. Andere Zugänglichkeitsarten umfassen lokale (wo Daten nur innerhalb einer einzigen Funktion zugänglich sind) und globale (wo Daten für jeden Code in einer Codeeinheit in jedem Funktionsaufruf verfügbar sind). Wie globale Daten ist der Zustand für mehrere Funktionen zugänglich, aber im Gegensatz zu globalen Daten greift die gleiche Methode auf verschiedene Daten zu, wenn sie für verschiedene Objekte aufgerufen werden. Ein Beispiel in einer erfundenen Sprache, die Variablen & amp; Daten:

%Vor%

Die Speicherdauer bestimmt, wie lange die Daten existieren (wenn sie erstellt und zerstört werden). Arten der Dauer beinhalten automatisch (wo die Daten existieren, bis die Funktion, die sie erstellt hat, existiert), static (die Daten existieren für das Leben des Prozesses) und dynamisch (Daten werden explizit erstellt und entweder explizit gelöscht oder durch einen Müllsammler gelöscht, wenn sie nicht mehr zugänglich sind). State teilt die Dauer mit seinem Objekt: Wenn das Objekt automatisch ist, ist der Status automatisch; Wenn dynamisch, ist der Status dynamisch.

State ist nicht die einzige Möglichkeit, Daten zwischen Methodenaufrufen verfügbar zu haben. Sie können die Daten auch als Argumente an die Methoden übergeben. In diesem Fall haben die Daten eine lokale Dauer. Der Unterschied zwischen dem to ist, dass für den Zustand "zwischen" Zeiten enthält, wenn keine Methode aufgerufen wird (dh auf dem Call-Stack ), während letzteres nicht gilt. Ob Status oder Argumente verwendet werden, hängt davon ab, welche Art von Dauer erforderlich ist. Bei öffentlichen Methoden reduziert die Verwendung zu vieler Argumente die Lesbarkeit und kann zu Fehlern führen (mit einer Funktion hoher Arity ), ist es einfacher zu bekommen die Reihenfolge falsch, oder vergessen Sie ein Argument vollständig). Als sekundäre Überlegung kann der Status dazu beitragen, die Anzahl der Argumente zu reduzieren.

Anwendung

Nach dem, was Sie bisher gezeigt haben, müssen die Daten, auf die Sie sich beziehen, nicht zwischen Methoden verfügbar sein und müssen nicht außerhalb jedes Methodenaufrufs existieren. Die Post-Felder, nach denen Sie fragen, sind im Grunde Argumente für einen Remote-Prozedur-Aufruf (RPC); Wenn Sie diese Argumente durch Aufruf von Methoden aufbauen möchten, wäre es sinnvoll, die Daten als Objektstatus zu speichern. So wie es ist, ist das Speichern der Post-Felder als Status gültig, aber nicht als Best Practice. Es ist auch nicht unbedingt schlimmste Übung. Im besten Fall verwirren Sie das Objekt und verschwenden Speicher, indem Sie die Daten beibehalten, wenn Sie nicht innerhalb einer Methode sind, die die API verwendet. Im schlimmsten Fall legen Sie in einer Methode Argumente fest, die beim Aufruf einer anderen Methode im RPC übergeben werden.

%Vor%

Das ist etwas, was du vermeiden willst. Es könnte leicht gemacht werden, indem man das post-fields-Array auf ein leeres Array setzt, aber zu diesem Zeitpunkt könnte man auch eine lokale Variable anstelle eines Feldes verwenden.

    
outis 16.10.2010, 00:07
quelle

Tags und Links