Das Unternehmen sprach über DI (Dependency Injection), Ich wusste nicht, dass ich nicht gut genug war, also beschloss ich zu studieren
・ Injektion von Abhängigkeit (wörtlich übersetzt) ・ Förderung der Komponentisierung durch Reduzierung des Kopplungsgrades ・ Effizienz des Unit-Tests ・ Reduzierte Abhängigkeit von einem bestimmten Rahmen ・ Es scheint einen DI-Container zu geben (hey)
Persönlich hat mich die Tatsache angezogen, dass Unit-Tests einfacher wurden.
Später, auch wenn es (anscheinend) zum Zeitpunkt der Implementierung komponiert wurde Es gibt nicht viel Verdienst, wenn sie voneinander abhängen.
(Es ist wirklich nutzlos zu glauben, dass man es nicht mit einem Muskel machen kann und wie viel man tun muss)
Wie auch immer, ich werde es schreiben.
Erstens ein Beispiel für Abhängigkeit.
no_di.py
class Country:
def getCountry(self):
return "Japanese"
class Position:
def getPosition(self):
return 'SuperStar'
class HorseName:
def getName(self):
return 'Caesario'
class GreatRealCondition:
def __init__(self):
self.c = Country()
self.p = Position()
self.h = HorseName()
def getGreatRealCondition(self):
return self.c.getCountry() + "\n" + self.p.getPosition() + "\n" + self.h.getName() + "!"
if __name__ == '__main__':
g = GreatRealCondition()
print(g.getGreatRealCondition())
Ausführungsergebnis.
Japanese
SuperStar
Caesario!
Wenn du nicht weißt, was der Text ist, gehe zu youtube Suche nach "Japanese Superstar Sea Zario!"
Die GreatRealCondition-Klasse
・ Länderklasse ・ Positionsklasse ・ HorseName-Klasse
Es hat eine enge Beziehung zu diesen Klassen (** drei dichten **).
Man kann also sagen, dass diese Klassen unzusammenhängend aussehen und eigentlich fast eine Klasse sind.
Es kann nicht wiederverwendet werden und es kann überhaupt nicht getestet werden (Sie können den Wert oder irgendetwas im Moment nicht ändern). Sie können den Wert ändern, indem Sie einen Setter in die Country-Klasse usw. einfügen. Dies ist jedoch kein Test mehr für die GreatRealCondition-Klasse.
Versuchen Sie also, die Abhängigkeit zu verringern.
on_di.py
class Country:
def getCountry(self):
return "Japanese"
class Position:
def getPosition(self):
return 'SuperStar'
class HorseName:
def getName(self):
return 'Caesario'
class GreatRealCondition:
def __init__(self, c: Country, p: Position, h: HorseName):
self.c = c
self.p = p
self.h = h
def getGreatRealCondition(self):
return self.c.getCountry() + "\n" + self.p.getPosition() + "\n" + self.h.getName() + "!"
if __name__ == '__main__':
c = Country()
p = Position()
h = HorseName()
g = GreatRealCondition(c, p, h)
print(g.getGreatRealCondition())
Ausführungsergebnis.
Japanese
SuperStar
Caesario!
Das Ergebnis war das gleiche wie zuvor.
Die große Veränderung hier ist
** Die GreatRealCondition-Klasse hat keine anderen Klassen mehr **
Erschöpft.
Die GreatRealCondition-Klasse, die sich auf 3 dichte Klassen stützte und keine andere Verwendung hatte,
Durch 3 dichte Klassen im Konstruktor waren verschiedene Verwendungen möglich. (Eigentlich dachte ich, ich würde verschiedene Muster ausprobieren, aber diesmal wird es lange dauern)
Nun, ich habe den Konstruktor verwendet, um "Abhängigkeiten zu injizieren".
Auf den ersten Blick sieht es so aus.
Diesmal habe ich mit dem Konstruktor injiziert,
Es scheint, dass es verschiedene Methoden wie Injektion mit Setter und Injektion durch Definieren der Schnittstelle gibt, also werde ich es auf jeden Fall versuchen.
Python kann auch ziemlich problematisch sein. (Ich bin einfach nicht daran gewöhnt)
Thanks!!
Hier ist ein hilfreicher Artikel. Vielen Dank. https://qiita.com/mkgask/items/d984f7f4d94cc39d8e3c
Recommended Posts