varias programar interfaz interfaces implementar ejercicios ejemplo con codigo clases atributos abstractas .net design domain-driven-design mvp project-structure

.net - programar - ¿Deben las interfaces vivir en el mismo espacio de nombres que las clases concretas que las implementan?



interfaz con atributos (3)

¿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!!


Ciertamente no hay una razón convincente para hacer eso.

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 (todos los cuales son casos válidos) ), entonces probablemente sea conveniente separar los espacios de nombres de implementación e interfaz.

No estoy muy seguro sobre C #, pero en Java, la membresía del paquete es un patrón de organización importante para aplicar 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).


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


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 entra en el conjunto junto con las interfaces, en lugar de los espacios de nombres.