¿Cuáles son las diferencias y similitudes entre los lenguajes específicos de dominio (DSL) y el diseño impulsado por dominio (DDD)?Idiomas específicos de dominio (DSL) y diseño impulsado por dominio (DDD)
Respuesta
Domain Driven Design (DDD) es una forma de pensar y comunicar sobre los problemas y sus soluciones.
El lenguaje específico del dominio (DSL) es una forma de escribir código.
Son similares porque ambos comienzan con la palabra "dominio". Eso es todo, supongo. :-)
Yo diría que están relacionados de alguna manera y no solo por la palabra "dominio". Una vez que tenga un buen diseño (controlado por el dominio), seguramente le ayudará a crear un DSL sólido.
"DDD no requiere específicamente el uso de una DSL, aunque podría usarse para ayudar a definir una DSL." - Wikipedia
Wikipedia tiene una definición bastante clara para DSL:
El término lenguaje específico del dominio (DSL) se ha vuelto popular en los últimos años en desarrollo de software a indican un lenguaje de programación o especificación lenguaje dedicado a un dominio de problema particular , una técnica de solución de problema particular técnica y/o una técnica de solución particular .
Esto se puede implementar como un conjunto de clases siguiendo un patrón consistente, una magia de plantillas de C++ sofisticada o un compilador/analizador que interpreta la entrada de texto libre para hacer lo que desee.
Creo que están relacionados de alguna manera (como dijo Christophe), pero dos aspectos totalmente diferentes. Ni siquiera descartaría la declaración de jop.
Para obtener información muy bien escrita sobre DSL, consulte Martin Fowler's set of pages on DSLs (trabajo en progreso), puede comenzar con example o definition. Otra buena lectura es su QandA.
DDD se basa en el modelo de dominio y generalmente tiene al menos un nivel de abstracción más alto que el DSL. Ambos pueden existir sin el otro, y como Christophe ya dijo, ambos pueden usarse en el mismo proyecto.
El diseño controlado por el dominio enfatiza la función del dominio del problema a medida que crea el vocabulario, los conceptos y el modelo de objetos fundamentales para el sistema que se está diseñando.
Un lenguaje específico de dominio es una notación para especificar o implementar partes específicas del sistema, orientadas a las necesidades del profesional en ese dominio (es decir, minimizar los aspectos "programados" de la mayoría de los lenguajes de programación o especificación).
Las diferencias, una es un enfoque para construir sistemas usando un lenguaje de lenguaje específico del dominio (DSL) en lugar de un lenguaje de propósito general y el otro es un enfoque arquitectónico (DDD) para diseñar y construir sistemas.
La similitud es que ambos se centran en el dominio específico.
Un elemento de DDD puede verse como la capacidad de desarrollar lenguajes ubicuos para hablar con los interesados sobre el dominio. Para el subconjunto de esas UL que no son ambiguas y potencialmente ejecutables, puede optar por implementarlas utilizando una DSL interna o externa.
He aquí un video de mí discutir esto en el sitio DomainDriven:
http://domaindrivendesign.org/library/bell_gitlevich_2009
mejores deseos, Peter
supongo que ambos tienen como objetivo principal la reducción del ruido en la programación, DDD actúa en ruido semántico y DSL en ruido sintáctico.
Estos pueden ayudar a entender mi opinión:
http://fragmental.tw/2009/03/12/expessive-design-slides/
http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/
- 1. Diseño impulsado por dominio: administrador y servicio
- 2. Contenedores IoC y diseño impulsado por dominio
- 3. Diseño impulsado por dominio y eventos de dominio
- 4. Diseño impulsado por dominio, objetos de dominio, actitud sobre Setters
- 5. ¿Qué es el diseño impulsado por dominio?
- 6. Entidades en el diseño impulsado por dominio
- 7. CouchDB/NoSQL y el diseño impulsado por el dominio?
- 8. Implementación del diseño impulsado por el dominio
- 9. Diseño impulsado por el dominio - Agregar raíces
- 10. ¿Qué es el diseño impulsado por dominio?
- 11. Diseño impulsado por dominio, SOC y identificación de entidad
- 12. ¿Diseño impulsado por el dominio en la programación funcional?
- 13. En Diseño impulsado por dominio, ¿puede usar las entidades de su dominio en su UI?
- 14. ¿Cómo organizar un proyecto de diseño impulsado por dominio?
- 15. Diseño impulsado por dominio y transacciones en el entorno Spring
- 16. Patrón de estado y diseño impulsado por dominio
- 17. Diseño impulsado por dominio y Entity Framework 4.1 (primer código)
- 18. diseño impulsado por dominio, repositorios y entidades mixtas
- 19. DDD: Diseño Dirigido por Dominio. ¿Qué significa el dominio en DDD?
- 20. Dominio Impulsado Esfuerzos de diseño en lenguajes dinámicos?
- 21. ¿Cómo combinar DDD (diseño impulsado por el dominio) DCI para diseñar una aplicación
- 22. Forma funcional de implementar el diseño impulsado por dominio
- 23. Preguntas relacionadas con el diseño impulsado por el dominio
- 24. Idiomas con dominio específico? ¿Cuál usas?
- 25. Diseño impulsado por dominio novato, explique brevemente 'objetos de valor' y 'servicios'
- 26. ¿Cómo se puede combinar el diseño impulsado por dominio con la programación orientada a aspectos?
- 27. de dominio de recursos específicos del idioma
- 28. Modelado de dominio, objetos de dominio en DDD
- 29. ¿Desventajas del diseño controlado por el dominio?
- 30. Arquitectura Orientada a Servicios y Diseño Dirigido por Dominio
Aunque divertido, creo que esta respuesta es algo inexacto. una DSL usaría el mismo lenguaje ubicuo que se obtiene al practicar DDD para el mismo dominio, no están completamente relacionados. –