Creo que las ventajas de este enfoque superan con creces cualquier desventaja.
Lo que está logrando aquí es más o menos una "implementación" perfecta de la entrada I
a SOLID
través del Stairway
patrón, es decir, su aplicación depende "abajo" de una interfaz definida en Company.Framework.Persistence.dll
y las implementaciones individuales también dependen "arriba" en esta abstracción.
Esto significa que su aplicación está muy desacoplada de cualquier detalle de implementación (por supuesto, generalmente querrá componer el gráfico de tiempo de ejecución real utilizando un Contenedor IOC de algún tipo). en desbordamiento de pila:
En el libro Adaptive Code a través de C #, el autor habla sobre este enfoque y lo menciona específicamente como algo que siempre debe hacerse porque proporciona un nivel tan alto de desacoplamiento. ( ejemplo )
Otra posible ventaja es poder parchear implementaciones individuales sin preocuparse de que pueda haber afectado a otros, aunque esta es bastante menor una vez que haya sido diligente con sus pruebas de regresión; También poder implementar las implementaciones individuales en subcarpetas que también pueden contener las versiones específicas de las dependencias de terceros que puedan necesitar, probablemente ayudará a mantener las cosas bien organizadas.
La única desventaja real que se me ocurre con este enfoque es que, en teoría, es posible cambiar la interfaz Company.Framework.Persistence.dll
(junto con los archivos binarios de su aplicación) y descuidar la actualización de los dlls de implementación correspondientes que generarán errores de tiempo de ejecución para sus usuarios.
Habiendo sido culpable de hacer exactamente esto en el pasado, puedo decir que esto es realmente solo algo que puede suceder si eres muy descuidado :)