¿Existe un estándar sobre cómo se organizan las soluciones/proyectos con respecto a las interfaces y las clases que las implementan? Estoy trabajando en una aplicación MVP, DDD y me encantaría escuchar comentarios sobre cómo otros diseñan sus proyectos y por qué lo hacen de esa manera. ¡¡Gracias!!¿Deben las interfaces vivir en el mismo espacio de nombres que las clases concretas que las implementan?
Respuesta
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.
Consulte el patrón de Martin Fowler en Separate Interfaces, podría ayudarlo a decidir dónde colocarlos.
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).
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
- 1. ¿Por qué deberíamos colocar las interfaces con las clases que las usan en lugar de las que las implementan?
- 2. ¿Cómo encontrar todas las clases que implementan una interfaz determinada?
- 3. ¿Dónde deberían las interfaces "vivir físicamente"?
- 4. ¿Deben las interfaces definir propiedades?
- 5. Proxy dinámico para las clases concretas
- 6. ¿Cómo encontrar todas las clases que implementan IDisposable?
- 7. C#: ¿Las clases abstractas necesitan implementar interfaces?
- 8. ¿Es malvada la herencia de las clases concretas?
- 9. ¿Las carpetas en una solución deben coincidir con el espacio de nombres?
- 10. JAXB: las clases generadas implementan la interfaz
- 11. Las pruebas unitarias deben ubicarse en el mismo paquete?
- 12. ¿Las clases abstractas de Do/can reemplazan las interfaces?
- 13. ¿Codificando a las interfaces?
- 14. Mecanografía implícita de matrices que implementan interfaces
- 15. Prueba de todas las clases que implementan una interfaz en Java
- 16. ¿Debo hacer explícitas las dependencias de clases concretas mediante la inyección de constructores en mis clases?
- 17. Cuando las propiedades de anidamiento que implementan INotifyPropertyChanged deben cambiar la propoción del objeto principal?
- 18. ¿Cómo es que las clases en las subcarpetas de mi carpeta App_Code no se encuentran correctamente?
- 19. Autorreferencia en las interfaces
- 20. Mantenga un registro de todas las clases que implementan una interfaz en particular?
- 21. ¿Cómo se implementan las clases en los compiladores
- 22. Pruebas unitarias: ¿codificación en las interfaces?
- 23. ¿Cuál es el punto de las interfaces en PHP?
- 24. Implementación de interfaces en C++ con clases concretas heredadas
- 25. Las declaraciones parciales de no deben especificar diferentes clases base
- 26. ¿Por qué las clases de Java no heredan las anotaciones de las interfaces implementadas?
- 27. ¿Cómo puedo hacer un seguimiento de (enumerar) todas las clases que implementan una interfaz?
- 28. Cómo inyectar dependencias en clases que implementan una interfaz?
- 29. Comprensión de las interfaces
- 30. Proguard mantener los nombres de las clases?
+1 Es interesante saber que tris es el [principio de inversión de dependencia (pdf)] (http://www.objectmentor.com/resources/articles/dip.pdf). –
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 –