2015-07-17 17 views
6

Ich habe bemerkt, dass einige Projekte Konstanten in ihrer eigenen Datei speichern, d. H. Global und in der Hauptprogrammschleife verwendete Konstanten könnten die Hauptdatei durcheinander bringen, vielleicht suchen sie sie woanders und verweisen/importieren dann Datei/Klasse.Wann sollten Konstanten in ihren eigenen Dateien definiert werden?

Ich verstehe, dass, wenn das Schreiben eine OOP-Klasse, die Sie alle Konstanten in der Kopfzeile der Klassendatei behalten wollen würden, so dass sie statisch als solche bezeichnet werden:

myCar.setColour(Colour.RED); 

Wo RED eine konstante Farbe ist in der Colour Klasse.

Was gute Praxis ist eine große Menge von Konstanten für aufweisen, sollten sie an der Spitze der Hauptdatei nur oder ist es in keiner Weise vielleicht eine ProgramConstants Klasse haben klug, die rein statisch ist, öffentlich und verfügbar lesen?

+0

Klassenebene für die Verwendung von Konstanten innerhalb dieser Klasse. Programmebene für die Verwendung von Konstanten in einer Gruppe von Klassen. –

+0

Was ist die Definition für Programmebene? Innerhalb oder außerhalb der Hauptklasse? – insidesin

+0

Ich denke, das beste Verfahren ist nicht zu große Mengen von Konstanten an erster Stelle :) – biziclop

Antwort

3

Was für mit einer großen Menge von Konstanten gute Praxis ist, sollten sie an der Spitze der Hauptdatei nur oder ist es in irgendeiner Weise weise vielleicht ein ProgramConstants Klasse

Die Entscheidung zu haben Wo die Konstanten platziert werden, hängt vom Typ der Konstanten ab. Die Integer Klasse im JDK hat eine Konstante namens MIN_VALUE, die den Minimalwert eines int definiert. Die Character Klasse definiert eine Konstante mit dem Namen MIN_VALUE, die den Mindestwert eines Zeichens definiert.

Vergleichen Sie den obigen Ansatz mit dem Ansatz der Definition einer globalen WrapperConstants Klasse/enum mit zwei Konstanten nämlich CHAR_MIN_VALUE und INT_MIN_VALUE. Sie werden bald weitere Konstanten zu dieser Datei für andere Datentypen hinzufügen. (LONG_MIN_VALUE, FLOAT_MIN_VALUE und so weiter ...)

Was passiert, wenn Sie auch MAX_VALUE definieren möchten? Sehen Sie, wie schnell Ihre Klasse explodieren kann? Was ist mit Lesbarkeit? Ist WrapperConstants.CHAR_MIN_VALUE besser lesbar als Character.MIN_VALUE? Nicht wirklich.

Definieren von Konstanten in Klassen, auf die sie sich beziehen, ist der Weg zu IMO. Allerdings gehören nicht alle Konstanten zu Java classes/interfaces/enums. Einige Konstanten (z. B. Fehlermeldungen) werden besser in Nachrichtenbündeln/Eigenschaftendateien platziert.

1

Ich bevorzuge es, Konstanten in Klassen zu setzen, wo sie logisch gehören.

Setzen Sie keine nicht verwandten Konstanten wie ProgramConstants in Klasse, da Sie eine Reihe von chaotischen Konstanten erstellen können, die schwer zu pflegen sind.

+0

Auch wenn Konstanten verwandt sind, sollten sie nicht in einer einzigen Datei gespeichert werden. Die Wrapper-Klassen in Java sind ein gutes Beispiel für verwandte Konstanten, die in ihren eigenen Klassendateien statt in einer 'WrapperConstants'-Datei definiert sind. – CKing

1

Nein, Sie sollten nicht alle Ihre Konstanten oben in Ihrer Hauptklasse oder in ihrer eigenen Klasse setzen, sie sollten in jede Klasse gehen, der sie logisch zugeordnet sind.

Das Problem ist, dass, wenn ein Programmierer einen allgemeinen Ort sieht, um etwas zu setzen, wie eine Konstanten-Datei, werden sie alle Konstanten hier setzen, um das Muster zu erhalten, während sie sie an den richtigen und logischen Ort bringen sollten. Mit einer großen Konstanten-Datei wird es schwieriger, mit Konstanten zu arbeiten, da sie effektiv nicht kategorisiert sind und die Modularität aufheben. Es ist Ihre Aufgabe als Architekt, das Entwerfen eines Systems mit solchen Fallen zu vermeiden.

Also sagen Sie zum Beispiel, dass Sie Systemeigenschaften haben, die sich auf die Ausführung Ihrer Java-Anwendung beziehen, dann haben Sie auf jeden Fall mehrere dieser Konstanten in Ihrer Hauptklasse. Wenn Sie in Ihrer Hauptklasse zu viele haben, verschieben Sie diese in eine SystemProperties-Klasse im selben Paket. Wenn ein Programmierer mehrere Konstanten für seine eigene Verwendung benötigt, beispielsweise für Farben in ihrem Beispiel, sollten sie ihre eigene Colors-Klasse erstellen, die in das Paket gehört, das dem Feature zugeordnet ist, das diese Konstanten enthält.

1

"Soll alle Konstanten in einer einzigen Datei definiert werden?"

Absolut nicht. In allen außer den kleinsten Programmen würde dies einen einzigen Streitpunkt/Chaos verursachen. Sehr ähnlich dem Anti-Pattern "globale Variable".

"Sollen Konstanten in ihren eigenen Dateien sein?"

Wieder, nein. Im Großen und Ganzen gibt es drei Arten von Konstanten, die jeweils in einer eigenen, leicht unterschiedlichen Art gruppiert werden müssen.

  1. Konstanten, die Teil des internen Implementierungsdetails sind, gehören sie in der Nähe des Implementierungscodes, der sie verwendet.
  2. Öffentliche API-Konstanten. Das sind Konstanten, die Teil des exponierten öffentlichen Auftrags einer API sind, sie gehören in der Nähe der API, die definiert wird.
  3. Systemkonfiguration für das Programm. Diese Konstanten gehören zum Bootstrap-Code für das System.
Verwandte Themen