Ich lese "Dependency Injection in .NET" von Mark Seemann (es ist fantastisch und muss es sein) und der Autor verwendet oft das Wort "Naht". Aber ich kann nicht verstehen, was es bedeutet. Hier ist ein Beispiel für die Verwendung dieses Wortes:
In Kapitel 7 wird erläutert, wie Sie Objekte in verschiedenen konkreten Frameworks wie ASP.NET MVC, WPF, WCF usw. erstellen. Nicht alle Frameworks unterstützen DI gleich gut, und selbst bei denen, die dies tun, unterscheiden sich die Vorgehensweisen erheblich. Für jedes Framework kann es schwierig sein, den SEAM zu identifizieren, der DI in diesem Framework aktiviert. Sobald SEAM gefunden wurde, haben Sie jedoch eine Lösung für alle Anwendungen, die dieses spezielle Framework verwenden. In Kapitel 7 habe ich diese Arbeit für die gängigsten .NET-Anwendungsframeworks durchgeführt. Stellen Sie es sich als einen Katalog von Framework-SEAMS vor.
Ich wäre Ihnen dankbar, wenn Sie mir helfen würden, dieses Wort zu verstehen.
quelle
Antworten:
Ich denke, der Begriff stammt von Michael Feathers Working Effectively with Legacy Code, in dem er eine Naht in Software als einen Ort erklärt, an dem sich zwei Teile der Software treffen und an dem etwas anderes injiziert werden kann. Die Analogie ist eine Naht in der Kleidung: Die Stelle, an der zwei Teile zusammengenäht werden. Das Teil auf jeder Seite berührt das andere nur direkt an der Naht. Zurück zur Software: Wenn Sie die Naht identifizieren, haben Sie die Stelle identifiziert, an der es eine genau definierte Schnittstelle gibt. Das ist es, was Sie in DI nutzen können, da Sie mit einer solchen Schnittstelle die Implementierung ersetzen können, ohne dass der Rest der Software dies erkennen kann (jedenfalls ohne zu schummeln).
quelle
Aufbauend auf Christians Antwort stammt der Begriff "Naht" meines Wissens aus Feathers 'Buch "Effective Working with Legacy Code" . Die Definition finden Sie auf Seite 31:
Betrachten Sie den folgenden Java-Code, um Beispiele zu geben, was eine Naht ist und was nicht:
Die oben beispielhaft angegebenen Nähte wären Nähte, es sei denn:
Grundsätzlich erleichtern Nähte das Testen von Einheiten. Ich kann
MyClass
wegen der Anrufe beiMyStaticClass.staticCall()
und keinen Unit Test schreiben(new MyInstanceClass()).instanceCall()
. Jede Einheit Test fürMyClass
‚sdoBunchOfStuff()
Methode müßte TestMyStaticClass.staticCall()
und(new MyInstanceClass()).instanceCall()
und alle ihre Abhängigkeiten , die aufgerufen. Umgekehrt ermöglichenFoo
undBarFactory
ermöglichen die injizierten Instanzen von Unit-Tests durch die Verwendung von Non-Final-Klassen mit Non-Final-Methoden (oder besser noch - Interfaces) dasMyClass
Schreiben, indem sie das Verspotten erleichtern.quelle