Gute Programmierpraktiken bei der Zentralisierung von Variablen

8

Ist es eine gute Programmierpraxis, wenn Sie mit mehreren Klassen arbeiten, die dieselbe Instanz von Variablen benötigen, eine zentrale zu erstellen?

%Vor%

Zum Beispiel:

  1. Ich habe eine Klasse mit einer festgelegten Anzahl von Variablen
  2. Ich habe eine andere Klasse, die dieselben Variablen benötigt
  3. Und ein anderer benötigt dieselben Variablen wie der erste

Also habe ich drei Klassen, die alle die gleiche Instanz von Variablen verwenden

Ich erzeuge die Instanz der Variablenklasse nur mit der ersten Klasse (1)

Ich greife auf diese Variablen mit den Klassen (2), (3) über die Klasse (1) zu

Beispiel: (während in classTwo ()):

%Vor%

BEARBEITEN : In der grundlegenden Form ist meine Frage, ob es in Ordnung ist, eine zentrale 'variable Klasse' zu erstellen und andere Klassen zu verwenden, um dieselbe Eigenschaft durch eine Hauptklasse zu erreichen.

Ich weiß, dass meine Frage schwer zu verstehen ist, aber ich bin mir sicher, dass es einen anderen, einfacheren Weg gibt. Ich habe versucht, die gleiche Instanz der ersten Klasse durch den Konstruktor der zweiten und dritten Klasse zu übergeben, aber meine Lösung schien etwas einfacher.

    
Andrei0427 07.09.2012, 08:04
quelle

5 Antworten

5

Das riecht nach Feature-Neid ... Hört sich an, als ob etwas mit deinem Modell nicht stimmt.

Wenn es eine Gruppe von Variablen gibt, die in mehreren Klassen geändert werden müssen, sollte es wahrscheinlich ein Objekt (wahrscheinlich sogar eine Entität) werden. Sie sollten jedoch bedenken, dass Sie, wenn Sie diese Werte in anderen Klassen ändern müssen, möglicherweise Logik in dieselbe Klasse einfügen müssen (um Validierungsprüfungen usw. durchzuführen).

Eine zusätzliche Klasse zu haben, nur um Variablen zu behalten, wird normalerweise als ein Code-Geruch betrachtet, der anämische Domäne genannt wird. Es gibt jedoch Fälle, die es erfordern, und es könnte sowieso eine Frage des Geschmacks sein. In diesem Fall ist deine Klasse nichts als eine verherrlichte Struktur.

    
Joeri Hendrickx 07.09.2012, 08:14
quelle
4

Es empfiehlt sich, die Abhängigkeitsinjektion zu verwenden und alle benötigten Ressourcen zu übergeben, anstatt Klassen zu finden, was sie wollen.

Die Verwendung globaler Variablen ist anfangs einfacher, aber wenn Ihre Anwendung wächst und Sie Komponententests verwenden möchten, sind das echte Probleme, da es schwieriger wird, diese zu verwalten und zu verwalten.

    
Peter Lawrey 07.09.2012 08:08
quelle
1

Es hört sich nicht so an, als hättest du deine Klassen richtig getrennt. Es kann für Klassen in Ordnung sein, andere Klassenvariablen zu ändern, aber ich würde vermeiden, eine Stelle zu haben, wo Sie veränderbare Variablen speichern. Das macht Dinge so aussehen wie globale Variablen, die sehr schwer zu managen und am besten zu vermeiden sind. Weitere Informationen dazu finden Sie hier . Schaut Gesetz des Dementers nach, was dabei hilft, lockere Verbindungen in Ihrem Programm zu halten.

    
RNJ 07.09.2012 08:07
quelle
1

Jedes Problem hat seine eigenen besten Kompromisse, Sie sollten sich eine Reihe von Fragen stellen. Brauchen (2) und (3) nur einen Zugriff auf (1) oder brauchen sie auch einen Schreibzugriff?

Was Sie tatsächlich tun (das Erstellen von (2) und (3) von (1) scheint gut, Builder-Muster, Sie erstellen Eigenschaften, auf die Sie niemals direkt zugreifen)

Wenn ein Schreibzugriff erforderlich ist, sollten (2) Änderungen von (3) (oder umgekehrt) mitgeteilt werden?

Im Allgemeinen sollten Sie so viel wie möglich Interaktionen von "Unterklassen" beschränken (idealerweise ist es besser zu vermeiden, etwas gemeinsam zu haben, wenn es natürlich möglich ist, aber im Allgemeinen ist es), so scheint auch der Zugriff von innerhalb (1) bessere Lösung als (1) von (2) und (3).

Diese Art der Einschränkung erhöht die Wartbarkeit des Codes und entfernt / reduziert Probleme wie die Benachrichtigung über die Änderung der Werte, wer wem gehört usw.

Im Grunde, wenn Benutzer nur über (1) Warren müssen und alle anderen Sachen intern behandelt werden, machen Sie bereits eine gute Arbeit (Pimpl Idiom sagt Ihnen nichts?)

Sie können auch theath (2) und (3) wie Erweiterungen zu (1) definieren, also genau wie ein Strategie-Pattern agieren. mit dem Vorteil, dass nur (1) sich um Probleme kümmern müssen, aber wenn Sie in Zukunft noch mehr benötigen (1), haben Sie bereits die Strategie bereit und Sie können mit minimalem Aufwand updaten. (Ich merke immer, dass in jedem Code, den Sie schreiben können, immer mehrere Muster vorhanden sind).

Am Ende sind Sie der Einzige, der alle Codedetails kennt, fragen Sie immer selbst, ob Sie die Wartbarkeit des Codes verbessern können, wie leicht lesbar ist usw., wo Upgrades möglich sind, etc.

    
Rax 07.09.2012 08:23
quelle
0

Ich bin mir nicht ganz sicher, was Sie brauchen, weil es keine Beispiele gibt, aber vielleicht ist das Registrierungsmuster das, was Sie brauchen.

Grundsätzlich erstellen Sie eine statische "globale" Klasse, die alle Variablen enthält, die Sie in Ihrer Anwendung benötigen

%Vor%

Nun können Sie in allen Klassen, die Zugriff auf diese Variablen benötigen, einfach darauf zugreifen und sie ändern:

%Vor%

Warten Sie eine Sekunde, bevor Sie das programmieren: Es ist nicht sehr empfehlenswert, solche "globalen" Variablen zu verwenden. Es korrumpiert die Datenkapselung, weil man nie weiß, wie und wann diese Variablen geändert werden und von wem.

Sie sollten besser Ihr Programm neu strukturieren, um sicherere Muster zu unterstützen, die Ihre Daten, z. Abhängigkeitsinjektion.

    
Florian Peschka 07.09.2012 08:07
quelle

Tags und Links