Ich denke, dass die Vorteile dieses Ansatzes die Nachteile bei weitem überwiegen.
Was Sie hier erreichen, ist mehr oder weniger eine perfekte "Implementierung" des I
In SOLID
über das Stairway
Muster - das heißt, Ihre Anwendung hängt "down" von einer in definierten Schnittstelle ab Company.Framework.Persistence.dll
und die einzelnen Implementierungen selbst hängen auch "up" ab. auf diese Abstraktion.
Dies bedeutet, dass Ihre Anwendung stark von Implementierungsdetails entkoppelt ist (natürlich möchten Sie normalerweise das eigentliche Laufzeitdiagramm mit einem IOC-Container erstellen). Ich habe schamlos mit einem vorhandenen Bild dieses Musters aus einer anderen Antwort zu diesem Thema verknüpft bei Stapelüberlauf:
In dem Buch Adaptive Code via C # spricht der Autor über diesen Ansatz und nennt ihn ausdrücklich etwas, das immer getan werden sollte, weil es ein so hohes Maß an Entkopplung bietet. ( Beispiel )
Ein weiterer möglicher Vorteil besteht darin, dass Sie einzelne Implementierungen patchen können, ohne befürchten zu müssen, dass Sie andere beeinflusst haben. Dies ist jedoch nur ein geringfügiger Vorteil, wenn Sie Ihre Regressionstests sorgfältig durchgeführt haben. Die Möglichkeit, die einzelnen Implementierungen in Unterordnern bereitzustellen, die auch die spezifischen Versionen von Abhängigkeiten von Drittanbietern enthalten können, die sie möglicherweise benötigen, wird wahrscheinlich dazu beitragen, die Dinge gut organisiert zu halten.
Der einzige wirkliche Nachteil, den ich mir bei diesem Ansatz Company.Framework.Persistence.dll
vorstellen kann, ist, dass es theoretisch möglich ist, die Benutzeroberfläche (zusammen mit den Binärdateien Ihrer Anwendung) zu ändern und die entsprechenden Implementierungs-DLLs nicht zu aktualisieren, was zu Laufzeitfehlern für Ihre Benutzer führt.
Nachdem ich mich in der Vergangenheit schuldig gemacht habe, kann ich sagen, dass dies wirklich nur etwas ist, was passieren kann, wenn Sie sehr nachlässig sind :)