2015-09-23 1 views
4

Je travaille sur une application Java simple et j'ai créé une classe appelée Config.java afin de gérer les propriétés de l'application, évitant ainsi codage.Éviter les méthodes statiques et les variables dans un fichier Java Class qui gère config.properties

La classe Config.java n'est pas une classe statique et je crée une instance de la classe Config.java dans une autre classe appelée Serial.java.

La méthode principale est située dans une autre classe appelée App.java. J'ai donc 3 classes au total:

  • App.java
  • Serial.java (instance de la classe Config se trouve ici comme une variable privée)
  • Config.java

À ce stade, tout va bien et il n'y a pas de défauts dans le design OOP. Cependant, j'ai besoin de créer une autre classe dans laquelle je dois appeler des méthodes de la classe Config.java. Quelle serait la meilleure approche afin d'avoir juste une instance de la classe Config.java:

  1. Modification des méthodes de la classe Config.java du public statique?
  2. Création de getters et setters pour l'instance de configuration qui se trouve dans la classe Serial.java?

Y at-il plus d'options/techniques que je peux utiliser pour atteindre mon objectif.

Toute aide ou suggestion est fortement appréciée.

Répondre

6

Sonne comme un emploi pour dependency injection


On dirait que vous êtes instanciation Config à Serial:

class Serial { 
    private Config config = new Config(); 
} 

Au lieu de créer dans Serial, Transmettre-le:

Config config = new Config(); 
Serial serial = new Serial(config); 

La classe Serial ressemblerait à ceci:

class Serial { 
    private Config config; 

    public Serial(Config config) { 
     this.config = config; 
    } 
} 

De cette façon, vous pouvez aussi passer à l'autre objet qui doit appeler des méthodes de Config:

OtherObj other = new OtherObj(config); 

Avec OtherObj défini comme:

class OtherObj { 
    private Config config; 

    public OtherObj(Config config) { 
     this.config = config; 
    } 
} 

Ce puits vous aidera à éviter les parasites.

+0

Petite addition: pour faciliter l'injection de dépendance, vous pouvez utiliser un D.I. cadre (par exemple Dagger) –

+0

Incroyable! La première chose le matin, je vais mettre en œuvre ceci et déboguer pour voir ce qui se passe exactement. Merci Vince Emigh! Tu gères! –

0

Bien que cela dépende des détails de votre domaine, je vois deux alternatives viables:

  • Ajouter une méthode getConfig vous classe App (considérant que la configuration appartient à l'App) et en utilisant l'instance App en tant que paramètre pour instancier l'objet de votre nouvelle classe.
  • Go pour un singleton qui has many criticisms
+0

Merci pour votre réponse. Cependant, étant donné que la méthode principale est située dans la classe App.java, il vaut mieux la laisser intacte, avec un code minimum possible. Singleton est également une bonne option, mais dans mon cas, l'injection de dépendance bat cette approche. –

+1

@MarioGalea Oui, Dependency Injection (DI) semble être la solution. Totalement glissé par moi, vous devriez le poster dans votre propre réponse ou éditer le mien. Merci. –