2009-11-13 19 views
5

Suponiendo que quiero utilizar un marco de inyección de dependencias en un enfoque de AOP, con el objetivo de producir módulos de código. ¿Cuál es la mejor práctica para la propiedad de las interfaces compartidas? Por propiedad me refiero al cuerpo de código que necesita referenciarse para usar la interfaz.Dependency Injection - ¿A quién pertenece la interfaz?

Mi primera conjetura es que en AOP se definiría una biblioteca de clases de interfaces, espacios de nombres por aspecto. por ejemplo: company.aspect.logging.ILogger. Cada módulo haría referencia a esta biblioteca y evitaría que cualquier código involucrado en la implementación de ILogger también definiera ILogger.

¿Mejores prácticas?

+0

Eso es exactamente lo que yo haría (tener interfaces en clases separadas que solo contienen interfaces). – Tomas

Respuesta

1

La definición de una biblioteca de clases de interfaces es un buen comienzo. Eso le brinda la máxima flexibilidad, ya que puede variar a todos los consumidores y a todos los implementadores de forma completamente independiente el uno del otro.

La desventaja de este enfoque es que si las interfaces propias de exportación otras interfaces como este:

public interface IMyInterface 
{ 
    IMyOtherInterface DoStuff(); 
} 

puede que tenga que escribir un montón de código de mapeo que pueden poblar clases concretas de las interfaces (o puede ause AutoMapper).

Si solo tiene un consumidor pero varios impelementadores, puede ahorrar parte de esta asignación definiendo las interfaces junto con el consumidor (nunca con el implementador), pero pierde algo de flexibilidad. Sin embargo, aún puede variar los ejecutores independientemente del consumidor, pero no al revés.

+0

Creo que un marco de inyección de dependencias se ocuparía de una gran parte del código de mapeo, tomando como ejemplo la Guice de Google. Gracias extra por la introducción a AutoMapper. Mi primera idea para esta herramienta en relación con mi pregunta sería: 1 - defina interfaces con la implementación 2 - use AutoMapper para construir una capa de adaptador logrando encapsular y admitir módulos de terceros. Solo reflexionando ... –

0

Depende de la finalidad de la interfaz:

Si el propósito de la interfaz es para definen un protocolo estándar entre un conjunto de proveedores alternativos y un solo consumidor, la interfaz es propiedad por el consumidor.

Si el propósito de la interfaz es definir un protocolo estándar entre un solo proveedor y un conjunto de consumidores alternativos, la interfaz es propiedad del proveedor.

Si el propósito de la interfaz es definir un protocolo estándar entre un conjunto de proveedores alternativos y un conjunto de consumidores alternativos, la interfaz se sostiene por sí misma.

Por último, si las interfaces están siendo utilizados como una aproximación general a reducir la complejidad, por lo general son propiedad de los consumidores y deben definirse como estrechamente como sea posible de modo que cada interfaz es compatible con las necesidades del consumidor en el contexto requisitos específicos.