Bonjour,
Je cherche comment injecter des propriétés spécifiques à un projet dans des objets fournis par une autre librairie.
Voici mon cas de figure:
Ma librairie offre deux classes : MyRepository et MyObject. Et MyRepository possède une méthode retournant un ensemble de MyObject:
Mon projet A utilise cette librairie et souhaiterait que les objets retournés par myRepository.getObjects aient une propriété de plus, déduisible des autres propriétés. Cette nouvelle propriété ne doit pas être ajoutée dans le cadre du projet B.
Code : Sélectionner tout - Visualiser dans une fenêtre à part List<MyObject> myRepository getObjects() {..}
Quelle est la meilleure façon de faire ?
Je pensais à ajouter dans la libraire les interfaces et méthodes suivantes :
Et dans le projet A:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public interface ObjectCreator { public MyObject create(X x, Y y); } public class MyRepository { private ObjectCreator objectCreator=null; public void setObjectCreator(ObjectCreator objectCreator) { this.objectCreator=objectCreator; } private MyObject createObject(X x, Y y) { if (objectCreator != null) return objectCreator.create(x,y); else return new MyObject(x,y); } // reste du code existant // ... }
Que pensez-vous de cette approche ? Quelles serait ses limites ? Voyez-vous d'autres approches ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class ProjetAMain { protected void init() { // ... myRepository.setObjectCreator(new ObjectCreator() { public MyObject create(X x, Y y) { return new MyObjectA(x,y); } } // ... } } public class MyObjectA extends MyObject { private Z z=null; public MyObjectA(X x, Y y) { super(x,y); } public Z getZ() { return z; } public void setZ(Z z) { this.z=z; } }
Partager