Me gusta la idea de tener interfaces e implementación separadas. Pero, ¿cómo está separado? ¿Las definiciones de interfaz están en un ensamblado .Net por separado? ¿Tiene un proyecto único que define todas las interfaces para una solución? De lo contrario, ¿hay problemas con las dependencias circulares de las interfaces?¿Dónde deberían las interfaces "vivir físicamente"?
Respuesta
Ponga sus objetos de dominio e interfaces en un conjunto separado de "dominio".
Este ensamblaje nunca debe hacer referencia a nada más que a los ensamblajes core .net.
De esta manera obtiene una separación limpia de su dominio/modelo de servicio y su implementación.
Editar:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
yo no pondría las interfaces en un ensamblado independiente sólo para el bien de ella. Sin embargo, si las interfaces toman parte en cualquier forma de IPC o arquitectura de extensibilidad, a menudo tiene sentido darles su propio conjunto.
Si tiene proyectos que necesitan referencia entre sí, entonces sí, necesitará un ensamblaje separado para las interfaces, pero también debe cuidadosamente examinar la arquitectura para ver si hay otra manera de resolver la dependencia circular.
Prefiero mantener las implementaciones más comunes o simples de la interfaz en una subcarpeta (y espacio de nombres) siguiendo el nombre de la interfaz.
\project\ \project\IAppender.cs \project\Appender\ \project\Appender\FileAppender.cs \project\Appender\ConsoleAppender.cs
Si extiendo esta clase fuera del proyecto. En un proyecto especial, repita las carpetas/espacio de nombres de manera similar.
\specialproject\ \specialproject\Appender\ \specialproject\Appender\MemoryAppender.cs
En el proyecto que estoy trabajando ahora, las interfaces y las clases base relacionados entran en asambleas que se dividen lógicamente entre las funciones. Las implementaciones de estos proveedores y clases van dentro de un ensamblaje central. La idea es que las personas que usan nuestra API pueden hacer referencia a más o a uno de los DLL dlls de una manera clara y lógica.
Las aplicaciones más pequeñas no necesitan este tipo de separación. Pero, no importa dónde guarde las interfaces, las mantendría en el mismo espacio de nombres como cualquier clase base.
- 1. ¿Dónde deberían vivir las funciones de utilidad en Django?
- 2. ¿Deberían las entidades implementar interfaces?
- 3. ¿Dónde deberían las enumeraciones vivir en una estructura de proyecto MVC?
- 4. ¿Dónde deberían vivir mis modelos? ¿Nivel web o Nivel de datos? (MVC + NHibernate)
- 5. ¿A dónde deberían ir las sentencias 'CreateMap'?
- 6. ¿Dónde deberían colocarse las funciones Symfony "globales"?
- 7. ¿Dónde deberían crearse virtualenvs?
- 8. ¿Dónde debería colocar las interfaces para MEF?
- 9. ¿Dónde deberían colocarse las pruebas unitarias en Meteor?
- 10. DDD: ¿Dónde guardar las interfaces de dominio, la infraestructura?
- 11. ¿Dónde deberían estar las consultas de la base de datos en vivo?
- 12. ¿Deben las interfaces vivir en el mismo espacio de nombres que las clases concretas que las implementan?
- 13. ¿Dónde deberían manejarse las señales en un proyecto django?
- 14. ¿A dónde deberían ir las bibliotecas en Rails 3?
- 15. ¿Dónde deberían las aplicaciones de Android llamar a SQLite getWritableDatabase?
- 16. ¿Deberían las interfaces estar en un proyecto separado de su implementación?
- 17. ¿Dónde están físicamente almacenados los conjuntos instalados en el GAC?
- 18. ¿Dónde están físicamente ubicados los ensamblados en .NET?
- 19. ¿De dónde sacó Java la idea de las interfaces?
- 20. Calcomanías físicamente realistas
- 21. ¿Las entidades de dominio deberían estar expuestas como interfaces o como objetos simples?
- 22. C# Cómo usar las interfaces
- 23. ¿Codificando a las interfaces?
- 24. Comprensión de las interfaces
- 25. Anotaciones en las interfaces?
- 26. Autorreferencia en las interfaces
- 27. JQuery vivir + Disqus/Google Analytics
- 28. ¿Cuándo se necesitan las interfaces?
- 29. ¿Cuán indulgente deberían ser las entradas?
- 30. Método de igualdad en las interfaces
Pensé que valía la pena incluir un enlace al excelente artículo de Jeffery Palermo sobre la arquitectura Onion http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –
Gracias. Este artículo explica muy bien el concepto. –