Ich mache ein Programm, das einige Konstanten benutzt. Jedes Mal, wenn ich eine Konstante verwenden musste, würde ich sie als
definieren %Vor%in der Klasse, wo ich es brauchen würde. Nach einiger Zeit wurde mir klar, dass einige Konstanten in mehr als einer Klasse benötigt würden.
Zu dieser Zeit hatte ich 3 Möglichkeiten:
Ich habe meinen Code mit der zweiten Option implementiert. Ist das die beste Alternative? Ich fühle, dass ich wahrscheinlich eine andere bessere Alternative vermisse.
Was mich bei der Verwendung des Singletons beunruhigt, ist, dass es keinem Benutzer der Klasse klar ist, dass diese Klasse den Singleton verwendet. Vielleicht könnte ich eine ConstantsClass erstellen, die alle benötigten Konstanten enthielt, und dann würde ich sie im Konstruktor an die Klassen übergeben, die sie brauchen?
Danke
edit: Ich benutze das meistens für komplexe Typen, nicht für Intets und Strings. Zumindest im C # -Fall, der einen Unterschied macht, da ich das Schlüsselwort const
nicht verwenden kann.
Keine Formulierung über C #, aber in Java gibt es mehrere Möglichkeiten, dieses Problem zu lösen.
Ändern Sie den Zugriffsmodifikator auf die Standardeinstellung (nur Paket) ) oder public
. Die einfachste Lösung.
Gruppieren Sie sie in einem Paket - privat oder public
enum
. Am einfachsten, wenn diese Werte miteinander verwandt sind . Z.B. Role.ADMIN
, Role.USER
, Role.GUEST
, usw.
Deklarieren Sie sie in einem Paket-private oder public
interface
und lassen Sie die Klassen implementieren. Tun Sie dies nur, wenn diese Konstanten zum einigen -Vertrag gehören, müssen die Klassen ebenfalls folgen.
Fügen Sie sie in Eigenschaftendateien ein und laden Sie sie als private static final Properties
und addiere public static String getProperty(String key)
. Wickeln Sie dies in eine Paket-private oder public
Configuration
-Klasse ein. Nützlicher, wenn diese Konstanten möglicherweise für Änderungen anfällig sind, die Sie dann extern steuern könnten.
Auf Konstanten muss nicht von einer Instanz zugegriffen werden, daher macht die ganze Singleton-Idee keinen Sinn.
Benutze eine Eigenschaftendatei und lege die Konstanten dort hinein.
ConfigurationManager.AppSettings-Eigenschaft in .NET existiert nur für diesen Zweck Grund. Sie fügen die Einstellungen in Konfigurationsdateien ein, unter der Annahme, dass dies Elemente sind, die Sie an einem Ort einstellen möchten, z. Für eine Website, die ASP.Net verwendet, ist web.config ein Ort, an dem Einstellungen vorgenommen werden können, so dass Entwicklungs-, Test- und Produktionsumgebungen unterschiedliche Einstellungen für ihre Ausführung haben können.
Ein Ansatz hierfür wäre die Verwendung von Spring, das sowohl in Java als auch in .NET verfügbar ist.
www.springsource.org
www.springframework.de .net - .net
Ansonsten würde ich eine Konfigurationsdatei verwenden.