Je l'écris pour me convaincre car il n'a pas l'air juste même si je regarde diverses explications.
Tout d'abord, s'il s'agit d'un style de manuel
"DI réalise" l'inversion du principe de contrôle ", qui est l'un des modèles de conception [^ 1]". Il est possible de séparer la création d'instances constituant un composant et la résolution des dépendances du code source. (D'une introduction approfondie à Spring par NTT DATA Corporation)
Je ne sais pas de quoi tu parles. Pour le moment, pensons à un endroit facile à comprendre.
[^ 1]: Collection de savoir-faire de conception dans les langages orientés objet
Pour le moment, que faire est de côté, que peut-on améliorer par DI?
・ Dépendance réduite entre les classes = couplage lâche entre les classes (devient un couplage lâche) ・ ↑ facilite la réutilisation des classes, etc. ・ ↑ facilite les tests unitaires, etc.
Il paraît que. Il semble y avoir un noyau ici parce que le mot «dépendance» est apparu à plusieurs reprises. Alors, quelles sont les «dépendances» dans la programmation?
Si vous utilisez des mots de manuel, "Un module change ou dépend du comportement interne d'un autre module = Si vous modifiez les spécifications d'un module dépendant, le contenu du module est susceptible d'être corrompu."
Qu'est-ce qu'une configuration qui dépend en fait fortement du langage Java, etc. -Une nouvelle instance d'une autre classe est créée dans une méthode d'une classe. -Utilisation d'une instance d'une autre classe comme argument d'une méthode d'une classe Etc. Si c'est un code concret
Hoge.java
class Hoge{
public void hoge(){
Fuga fuga = new Fuga();
}
}
C'est devenu assez concret. Si vous utilisez une nouvelle classe dans une classe, et s'il y a un changement dans le constructeur de la nouvelle classe, vous pouvez imaginer que la méthode appelante doit également être modifiée. De plus, si vous modifiez la méthode dans la classe qui crée l'instance, le traitement de l'appelant sera interrompu. La solution à ce problème consiste à faire en sorte que la classe appelante utilise l'interface au lieu de créer une instance en créant une nouvelle classe d'implémentation et à faire de la nouvelle classe une classe qui hérite de l'interface. C'est.
Fuga.java
pulic interface Fuga{
int a;
void foo();
}
HogeFuga.java
pulic HogeFuga implements Fuga{
int a;
void foo(){
fugafuga;
};
}
Hoge.java
class Hoge{
public void hoge(){
Fuga fuga = new HogeFuga();
}
}
En utilisant cette méthode, vous pouvez utiliser librement la classe qui implémente l'interface et vous pouvez réduire la dépendance. Cependant, après tout, la classe d'interface ne peut pas être nouvelle, il est donc nécessaire de décrire la sous-classe implémentée comme étant nouvelle chez l'appelant.
Par conséquent, décrivez la relation à l'aide d'un fichier xml ou d'une annotation. ↓ C'est "DI"
Hoge.java
class Hoge{
Fuga fuga;
public void hoge(){
}
public void setFuga(Fuga fuga){
this.fuga = fuga;
}
}
À ce stade, toute classe qui implémente la classe Fuga peut être passée à la classe setFuga, et la classe Hoge ne se soucie pas de la classe réellement utilisée.
Est-ce le courant dominant lorsque vous utilisez Spring?
Hoge.java
class Hoge{
@Autowired
protected Fuga fuga
public void hoge(){
}
}
Qu'est-ce que DI? = Je veux réduire la liaison de la classe que j'utilise!
Recommended Posts