В чем различия и сходства между предметно-ориентированными языками (DSL) и предметно-ориентированным дизайном (DDD)?





Domain Driven Design (DDD) - это способ думать и сообщать о проблемах и способах их решения.
Доменно-специфический язык (DSL) - это способ написания кода.
Они похожи, потому что оба начинаются со слова «домен». Думаю, это все. :-)
Я бы сказал, что они как-то связаны, и не только словом «домен». Если у вас есть хороший (доменно-ориентированный) дизайн, он, несомненно, поможет в создании надежного DSL.
«DDD специально не требует использования DSL, хотя его можно использовать для определения DSL». - Википедия
В Википедии есть довольно четкое определение DSL:
The term domain-specific language (DSL) has become popular in recent years in software development to indicate a programming language or specification language dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique.
Это может быть реализовано в виде набора классов, следующих некоторому последовательному шаблону, некоторой причудливой магии шаблонов C++ или компилятора / парсера, который интерпретирует ввод свободного текста, чтобы делать то, что вы хотите.
Я думаю, что они как-то связаны (как выразился Кристоф), но это два совершенно разных аспекта. Я бы даже не стал отклонять заявление Джопа.
Для очень хорошо написанной информации о DSL обратитесь к Набор страниц Мартина Фаулера о DSL (работа в процессе), вы можете начать с пример или определение. Еще одно хорошее чтение - его QandA.
DDD основан на модели предметной области и обычно по крайней мере на один уровень абстракции выше, чем DSL. Оба могут существовать без друг друга, и, как уже сказал Кристоф, их можно использовать в одном проекте.
Доменно-ориентированное проектирование подчеркивает роль проблемной области при создании фундаментального словаря, концепций и объектной модели для проектируемой системы.
Специфический для предметной области язык - это обозначение для определения или реализации определенных частей системы, ориентированное на потребности практикующего специалиста в этой области (то есть минимизация «программных» аспектов большинства языков программирования или спецификаций).
Различия: один - это подход к построению систем с использованием предметно-ориентированного языка (DSL) вместо языка общего назначения, а другой - архитектурный подход (DDD) к проектированию и построению систем.
Сходство в том, что они оба сосредоточены на определенной области.
Один из элементов DDD можно рассматривать как способность разрабатывать универсальные языки для общения с заинтересованными сторонами о предметной области. Для подмножества тех UL, которые являются однозначными и потенциально исполняемыми, вы можете реализовать их с помощью внутреннего или внешнего DSL.
Вот видео, на котором я обсуждаю это на сайте DomainDriven:
http://domaindrivendesign.org/library/bell_gitlevich_2009
С наилучшими пожеланиями, Питер
Я предполагаю, что оба имеют своей основной задачей сокращение шума в программировании, DDD действует на семантический шум, а DSL - на синтаксический шум.
Они могут помочь понять мое мнение:
http://fragmental.tw/2009/03/12/expessive-design-slides/
http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/
В Википедии (https://en.wikipedia.org/wiki/Domain-driven_design) есть хороший ответ:
DDD does not specifically require the use of a DSL, though it could be used to help define a DSL and support methods like domain-specific multimodeling.
Хороший ответ дает Маркус Фельтер в его Книга DSL Engineering, параграфе 2.5.2 Инструмент мышления и общения:
In effect, a DSL is a formalization of the Ubiquitous Language in the sense of Eric Evans’ Domain Driven Design.
Хотя это забавно, я думаю, что этот ответ несколько неточен. DSL будет использовать тот же самый распространенный язык, что и вы, практикуя DDD для того же домена, они не совсем не связаны друг с другом.