wie entworfen wird, wenn einige Konstanten von mehreren Klassen verwendet werden

8

Ich habe einige gemeinsame Konstanten, die von mehreren Klassen verwendet werden.

Was ist der effektivste Weg, um in diesem Fall zu entwerfen:

  1. Soll ich die Konstanten in jeder Klasse neu definieren?
  2. Oder sollte ich solche Konstanten in einer öffentlichen Klasse trennen und die Konstanten (in einer separaten Klasse) innerhalb jeder Klasse verwenden?

Oder gibt es einen anderen besseren Ansatz?

Hinweis: - Ich suche nach der besten OO-Technik, die dafür geeignet wäre.

    
mohit 18.12.2015, 05:09
quelle

6 Antworten

3

Konstanten sollten streng mit einem Typ verbunden sein, sie sollten nicht einfach "existieren". Eine Constants -Klasse mag zwar praktisch erscheinen, aber sie wird bald nicht mehr zu halten sein, ganz zu schweigen von vielen, die sie als Antipattern betrachten.

Es ist schwierig, Verbesserungen vorzuschlagen, ohne Ihren Code zu sehen, aber es scheint, als müssten Sie Ihr Design überdenken, wenn Sie dieselben Konstanten finden, die in einigen anderen Klassen außerhalb des Bereichs eines Typs definiert sind.

    
trevor-e 18.12.2015 05:41
quelle
1

Wenn die contants einer api gewidmet sind, definieren Sie sie dort. ZB

%Vor%

Wenn Konstanten nicht zu einer einzigen API gehören, definieren Sie eine Konstantenschnittstelle. Z.B. javax.swing.WindowConstants .

  

Oder gibt es einen anderen besseren Ansatz? Hinweis: - Ich suche nach der besten OO-Technik, die dafür geeignet wäre.   Java

Das bringt uns zu der Frage zurück, wie Konstanten verwendet werden. Meistens werden sie verwendet, um bedingten Code zu schreiben. ZB

%Vor%

Finde in diesem Fall heraus, was der Zweck der Konstanten ist. Im obigen Beispiel sollen die Aufgaben gruppiert werden, oder wenn Sie darüber nachdenken, sie zur Ausführung anzuordnen. Verschiebe diese Logik in eine eigene Klasse. Z.B. Führen Sie eine Priority -Klasse ein, die Compareable implementieren könnte;)

Sie können auch einen Blick auf mein Blog über type-switches Ссылка . Es geht um enum Missbrauch, aber es gilt auch für Konstanten.

    
René Link 21.12.2015 08:20
quelle
1

Die Bereitstellung einer Constant Util-Klasse ist der sauberste Weg.

%Vor%

Die typische Ordnerhierarchie ist wie folgt

%Vor%     
Enzokie 18.12.2015 05:22
quelle
0

Sie können versuchen, eine Klasse zu erstellen, die alle Konstanten enthält (d. h. den zweiten Ansatz).

Zum Beispiel:

%Vor%

und dann benutze es wie

%Vor%

Da einige vorgeschlagen haben, die Schnittstelle zu verwenden, um Konstanten zu erstellen, denke ich nicht, dass dies eine gute Wahl wäre. Die Verwendung von Interfaces zur Erstellung von Konstanten hat auch einige Nachteile:

  
  • Die Verwendung einer Schnittstelle erlaubt es nicht, einen Mechanismus zum Konvertieren der Konstanten in eine sichtbare / für Menschen lesbare Implementierung zu implementieren   Darstellung.
  •   
  • Wenn die Konstanten ein "Implementierungsdetail" sind, ist eine Schnittstelle möglicherweise nicht der natürliche Ort für den Wert (CodeSmells, ListenToTheCode).
  •   
  • Aufgrund der Java-Compiler-Optimierung ist eine vollständige Neukompilierung aller Klassen mit den Konstanten erforderlich, wenn sich eine Konstante ändert.   Nur die Schnittstelle zu ändern und neu zu kompilieren funktioniert nicht (dies   ist jedoch der Fall, wenn alle Konstanten als 'statisch final' definiert sind.
  •   

Siehe:

Rahul Tripathi 18.12.2015 05:14
quelle
0

Konstante Klasse:

%Vor%

Und Verwendung:

%Vor%

Bearbeiten: In den meisten Fällen verwenden Sie interface anstelle von class , wenn diese Schnittstelle nicht von einer Klasse implementiert werden muss, dann ist es nicht notwendig, public static final hinzuzufügen, weil es standardmäßig public static final ist, so dass Ihr Code mehr aussieht sauber.

    
Bahramdun Adil 18.12.2015 05:16
quelle
-1

Entwerfe eine Klasse wie AppUtil.java und definiere deine Konstanten public static final wie unten:

%Vor%

und wann Sie die Variable verwenden möchten. wie unten:

%Vor%     
Arun kumar 18.12.2015 05:43
quelle

Tags und Links