2011-01-26 23 views

Respuesta

10

Deben vivir en el espacio de nombres que es lógico para ellos; esto significa que no existe una regla firme para que residan o no en el mismo espacio de nombres. Encontrará espacios de nombres relativamente abstractos que a menudo no conviven con su implementación, mientras que las interfaces que son más de 1: 1 con sus implementadores tienen más probabilidades de permanecer juntas.

Una consideración más importante es mantener las interfaces consumibles para su reutilización, normalmente esto significa una mayor consideración dada a lo que va en el ensamblaje junto con las interfaces, en lugar de los espacios de nombres.

4

Consulte el patrón de Martin Fowler en Separate Interfaces, podría ayudarlo a decidir dónde colocarlos.

+1

+1 Es interesante saber que tris es el [principio de inversión de dependencia (pdf)] (http://www.objectmentor.com/resources/articles/dip.pdf). –

+0

Despejó mi duda un poco sobre esta situación: http://stackoverflow.com/questions/5840219/why-should-we-place-interfaces-with-classes-that-use-them-rather-thhan-the that –

1

Sin duda no hay una razón de peso para hacerlo.

De hecho, si los usuarios de la interfaz no necesitan conocer la clase concreta, y si hay varias implementaciones, y si el grupo que define la interfaz es diferente del grupo que implementa una determinada versión de la misma (todas que son casos válidos), entonces probablemente sea conveniente separar los espacios de nombres de implementación e interfaz.

No estoy muy seguro acerca de C#, pero en Java, la membresía del paquete es un patrón de organización importante para imponer la visibilidad del método. Si desea hacer uso de cosas privadas del paquete, básicamente tiene que agrupar las clases de implementación en el mismo paquete (para que probablemente no pueda unirlas con las interfaces).

+0

Correcto, he estado creando mis proyectos con un espacio de nombres para objetos de dominio y un espacio de nombres diferente para sus interfaces. Estaba viendo algunos proyectos de ejemplo en línea y me di cuenta de que agrupaban las interfaces de objeto de dominio y las implementaciones concretas juntas, y solo querían ver si así era como la mayoría lo hacía. – Cognitronic

Cuestiones relacionadas