Pregunta

Mi pregunta no es tanto sobre el uso de interfaces sino más bien sobre la naturaleza de la organización del proyecto.

Nota: Estoy usando VisualStudio en una aplicación de varias capas.

¿Deberían mis archivos de interfaz vivir en un proyecto separado de sus implementaciones? Mi pensamiento inicial es que sería útil separar todas mis interfaces de servicio en su propio proyecto (y un proyecto para mi inicial implementaciones) para que en el futuro la implementación / proyecto concreto se pueda eliminar y reemplazar por uno nuevo si es necesario.

Para aclarar con un ejemplo: supongamos que tengo una interfaz de capa empresarial llamada IBusinessService que vive en el espacio de nombres MyApp.Business.Services. Mi implementación FooBusinessService existiría en el mismo espacio de nombres, pero en un proyecto diferente en VisualStudio. Si más tarde la implementación necesitara ser revisada, un desarrollador podría eliminar la referencia a FooService.proj y reemplazarla con una referencia a BarService.proj.

Esto parece que resolvería la solución de la aplicación al permitirle hacer referencia a un proyecto con solo interfaces sin también adquirir implementaciones concretas (que pueden ser obsoletas o inútiles para usted), pero ¿me estoy perdiendo algo?

¿Fue útil?

Solución

Estoy contigo. Prefiero poner mis interfaces en un proyecto separado Y en un espacio de nombres diferente. El ejemplo clásico es con las clases de acceso a datos. Desea poder codificar una versión MSSQL y una versión MySQL, ambas implementando la misma interfaz. Como tal, prefiero que la definición de interfaz esté en un ensamblado / proyecto separado. Aquí hay un ejemplo de cómo diseño conjuntos y espacios de nombres:

  • Elder.DataAccess.Core - contiene las interfaces y utilidades comunes
  • Elder.DataAccess.MSSQL: implementaciones específicas de MSSQL de las interfaces
  • Elder.DataAccess.MySQL: implementaciones específicas de MySQL de las interfaces

Esto me permite modificar las implementaciones sin tocar el proyecto que contiene las definiciones de interfaz. Esto también me ayuda con el control de versiones y el seguimiento de cambios. Puede haber otras formas de desollar a este gato, así que estaré ansioso por ver las respuestas de otras personas.

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