Pregunta

Me gusta la idea de tener Interfaces y Aplicación por separado.Pero, ¿cómo separar?Son las definiciones de Interfaz en un aparte .Neto de la asamblea?¿Tienes un proyecto que define todas las Interfaces para una solución?De lo contrario, ¿hay problemas con las dependencias circulares de Interfaces?

¿Fue útil?

Solución

Pon tu dominio de objetos e interfaces en un separado "dominio" de la asamblea.
Esta asamblea debe nunca de referencia de nada, pero el núcleo .net asambleas.

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

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

Otros consejos

No voy a poner las interfaces en un conjunto separado sólo por el bien de ella.Sin embargo, si las interfaces de tomar parte en cualquier forma, de la cia o de la extensibilidad de la arquitectura, a continuación, que a menudo tiene sentido darles su propia asamblea.

Si tiene proyectos que tienen que hacer referencia a cada uno de los otros, entonces sí, se necesita un conjunto separado de las interfaces, pero también debe cuidadosamente examinar la arquitectura a ver si hay otra forma de resolver la dependencia circular.

Yo prefiero mantener el más común o simple implementaciones de la interfaz en una sub-carpeta (y el espacio) a continuación del nombre de la interfaz.

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

Si puedo extender esta clase fuera del proyecto.En un proyecto especial, que repita las carpetas/espacio de nombres del mismo modo.

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

En el proyecto en el que estoy trabajando ahora, las interfaces y los relacionados con la base de las clases de ir a las asambleas que son lógicamente dividido entre funciones.Las implementaciones de estos proveedores y clases de ir dentro de un núcleo de la asamblea.La idea es que la gente que utilizar nuestro API de referencia de más o una de las API dll en un claro y de manera lógica.

Aplicaciones más pequeñas no necesitan este tipo de separación.Pero, no importa donde guardo las interfaces, yo los mantendría en el mismo espacio de nombres como cualquier base de clases.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top