2012-03-20 13 views
9

Si defino una interfaz ITestInterface y luego creo inmediatamente una clase que implementa esa interfaz para su uso dentro de una aplicación, está bien mantener la clase y la interfaz en el mismo espacio de nombres o deberían estar separados es decir, Test.Interfaces y Test.Interfaces.Implementation.Debería poner mi definición de interfaz en el mismo espacio de nombres que su implementación

Tanto mi interfaz como su implementación estarán en su propio ensamblaje, así que no estoy buscando crear otra solo para contener la interfaz.

Esto está particularmente relacionado con C# sin embargo, supongo que puede abarcar cualquier idioma.

+1

Test.Interfaces.Implementation parece un poco contradictorio dado que las interfaces y las implementaciones son mutuamente excluyentes. – Robbie

+4

No organizaría espacios de nombres según el tipo de cosa que contienen, sino por su propósito. – davisoa

Respuesta

13

Probablemente sea mejor usar las convenciones establecidas de las clases predefinidas de .NET. Por ejemplo, al buscar en el espacio de nombre System.Collections.Generic, podemos ver que IDictionary y Dictionary están ahí. Entonces, probablemente ponerlos en el mismo espacio de nombres es la mejor idea.

Además, como la interfaz y la implementación probablemente tienen el mismo objetivo, es mejor agruparlas en el mismo espacio de nombres.

+0

Sí, esa es la confirmación que estaba buscando, aplausos. – dreza

2

System.Collections.ArrayList implementa System.Collections.IList. Si Microsoft lo hace, ¿por qué no?

+1

porque http: //en.wikipedia.org/wiki/Cargo_cult_programming –

+0

@Tim no llego a ver a su relevancia. La pregunta era dónde colocar la interfaz, no si era necesaria. –

1

Es una pregunta muy abstracta. ¿Cuál es el motivo de la interfaz? ¿Es un API/framework público o una aplicación simple? ¿Vas a tener múltiples implementaciones de la misma interfaz?

Si las interfaces están en sus propios ensamblajes, es una buena práctica que los espacios de nombres base coincidan con los nombres de los ensamblajes. Pero parece que te refieres a que la clase y la interfaz están en el mismo ensamblaje.

2

Esto está particularmente relacionado con C# sin embargo, supongo que puede cubrir cualquier idioma .

Es típico en Java tener los dos en el mismo paquete. La única excepción que puedo pensar podría ser una interfaz DAO en una persistencia de paquete y diferentes implementaciones en subpaquetes debajo de eso (por ejemplo, jdbc, hibernate, jdo, etc.)

Puede pensar en una interfaz pública como la API que es expuesto desde el paquete. Puedo ver que las clases de implementación pueden ser de paquete privado, lo que impide que los usuarios accedan a la implementación a través de otra cosa que no sea la interfaz. Deben proporcionarse métodos de fábrica públicos para otorgar acceso.

+0

Saludos. Eso parece estar de acuerdo con lo que dijo @Tudor sobre las prácticas de Microsofts también. – dreza

0

¿Cuál es su intención?

Si desea "ocultar" la implementación del resto de su código y/o elegir cuál de las varias implementaciones disponibles para "inyectar" en tiempo de ejecución, entonces su clase no debe ser pública de todos modos, entonces no lo hace realmente importa en qué espacio de nombres reside.

De lo contrario, no hay ningún problema para la interfaz y la clase que residen en el mismo espacio de nombres.

2

¿Qué hay de los ensamblajes separados, el mismo espacio de nombres? Me gusta.

+0

Esto puede causar un problema cuando agrega una referencia al conjunto que contiene la clase que implementa la interfaz. El compilador lanzará un error si no tiene una referencia al ensamblado que contiene la interfaz. La persona que llama se queda con la tarea de rastrear el conjunto que contiene la interfaz. – Ben

+2

Creo que el problema es que la persona agregue el ensamblaje de implementación sin el conjunto de interfaz. No necesariamente debe diseñar sus Soluciones en función de lo que otra persona podría hacer con ellas. – Chalky

Cuestiones relacionadas