2008-09-11 8 views
5

Me gusta la idea de tener interfaces e implementación separadas. Pero, ¿cómo está separado? ¿Las definiciones de interfaz están en un ensamblado .Net por separado? ¿Tiene un proyecto único que define todas las interfaces para una solución? De lo contrario, ¿hay problemas con las dependencias circulares de las interfaces?¿Dónde deberían las interfaces "vivir físicamente"?

Respuesta

7

Ponga sus objetos de dominio e interfaces en un conjunto separado de "dominio".
Este ensamblaje nunca debe hacer referencia a nada más que a los ensamblajes core .net.

De esta manera obtiene una separación limpia de su dominio/modelo de servicio y su implementación.

Editar:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

+0

Pensé que valía la pena incluir un enlace al excelente artículo de Jeffery Palermo sobre la arquitectura Onion http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –

+0

Gracias. Este artículo explica muy bien el concepto. –

3

yo no pondría las interfaces en un ensamblado independiente sólo para el bien de ella. Sin embargo, si las interfaces toman parte en cualquier forma de IPC o arquitectura de extensibilidad, a menudo tiene sentido darles su propio conjunto.

Si tiene proyectos que necesitan referencia entre sí, entonces sí, necesitará un ensamblaje separado para las interfaces, pero también debe cuidadosamente examinar la arquitectura para ver si hay otra manera de resolver la dependencia circular.

1

Prefiero mantener las implementaciones más comunes o simples de la interfaz en una subcarpeta (y espacio de nombres) siguiendo el nombre de la interfaz.

 
\project\ 
\project\IAppender.cs 
\project\Appender\ 
\project\Appender\FileAppender.cs 
\project\Appender\ConsoleAppender.cs 

Si extiendo esta clase fuera del proyecto. En un proyecto especial, repita las carpetas/espacio de nombres de manera similar.

 
\specialproject\ 
\specialproject\Appender\ 
\specialproject\Appender\MemoryAppender.cs 
0

En el proyecto que estoy trabajando ahora, las interfaces y las clases base relacionados entran en asambleas que se dividen lógicamente entre las funciones. Las implementaciones de estos proveedores y clases van dentro de un ensamblaje central. La idea es que las personas que usan nuestra API pueden hacer referencia a más o a uno de los DLL dlls de una manera clara y lógica.

Las aplicaciones más pequeñas no necesitan este tipo de separación. Pero, no importa dónde guarde las interfaces, las mantendría en el mismo espacio de nombres como cualquier clase base.

Cuestiones relacionadas