Sollten bei der Implementierung der Abhängigkeitsinjektion Ausnahmen injiziert werden?

8

Mein Team wühlt sich durch die Implementierung der Abhängigkeitsinjektion in einem PHP-Projekt mit einem hausgemachten DI-Container. Unsere erste Iteration von DI wurde vielleicht auf die Spitze getrieben, und sogar Ausnahmen werden in Klassen injiziert, die davon abhängen.

Ist das eine gute Übung oder ein Overkill?

    
DRock 05.08.2010, 14:39
quelle

2 Antworten

9

Der Zweck von Dependency Injection besteht darin, die Verantwortung für den Erhalt von Abhängigkeiten zu invertieren, die Kollaborateure sind, die von einem Objekt verwendet werden, um die Konfiguration oder das kollaborative Verhalten zu vereinfachen.

Im Allgemeinen sind Ausnahmen für den Vertrag einer bestimmten Klasse inhärent. Das heißt, Ausnahmen sind Teil des impliziten oder expliziten Vertrags darüber, wie sich eine Komponente im Fehlerfall verhält und daher nicht mit Derivaten ausge- tauscht werden kann. Ereignisse haben auch typischerweise kein Verhalten, daher ist es auch nicht besonders wertvoll, sie zum Zwecke der Testisolierung zu abstrahieren. Da Ereignisse in der Regel nur einen Fehlerzustand oder ein Ereignis darstellen, ist das Einbringen von Derivaten der Ausnahme ebenfalls nicht besonders wertvoll, da alle Verbraucher der Komponente gegen den Basisausnahmevertrag kodieren müssten (dh keine zusätzlichen Eigenschaften würden dies tun) gesehen werden).

Es gibt vielleicht einige legitime Gründe, warum Sie eine Ausnahme einfügen möchten, etwa mit dem Entwurf einer Ausnahmebehandlungskomponente, die Ausnahmen nach dem Loggen, Wrapping, etc. zurückgibt, oder vielleicht wo Die Konstruktion der Exception selbst benötigt externe Ressourcen, um zu erreichen (obwohl diese Notwendigkeit mir selbst eine Pause einbringen würde), aber im Allgemeinen würde ich nicht sagen, dass Sie entkoppeln sollten, wie eine Komponente ihre Fehlerzustände von den Komponenten selbst meldet.

    
Derek Greer 06.08.2010, 01:22
quelle
4

Das klingt nach einem guten Overkill.

Wenn eine Exception ausgelöst wird, sollte sie über ihre Nachricht und ihren Typ einige nützliche Informationen bereitstellen.

Wenn Sie die zu verwendende Exception-Klasse injizieren, bedeutet dies, dass der Typ der Exception nicht mehr nützlich ist, um herauszufinden, was das Problem wirklich ist (weil Sie den Typ bereits kennen, seit Sie ihn injiziert haben).

    
Justin Niessner 05.08.2010 14:45
quelle