Домен-специфические языки (DSL) и доменно-управляемый дизайн (DDD)
-
05-07-2019 - |
Вопрос
В чем различия и сходства между предметно-ориентированными языками (DSL) и доменно-управляемым дизайном (DDD)?
Решение
Domain Driven Design (DDD) - это способ думать и сообщать о проблемах и их решениях. Р>
Domain Specific Language (DSL) - это способ написания кода.
Они похожи, потому что оба начинаются со слова "домен". Вот и все, наверное. : -)
Другие советы
Домен-управляемый дизайн подчеркивает роль проблемной области при создании фундаментального словаря, концепций и объектной модели для проектируемой системы.
Специфичный для домена язык - это нотация для указания или реализации определенных частей системы, ориентированная на потребности специалиста в этой области (то есть минимизация «программируемых» аспектов большинства языков программирования или спецификаций). р>
Я бы сказал, что они каким-то образом связаны, а не только словом «домен». Если у вас есть хороший (управляемый доменом) дизайн, он, несомненно, поможет в создании надежного DSL.
" DDD специально не требует использования DSL, хотя его можно использовать для определения DSL. " - Википедия
Я полагаю, что в обоих случаях основное внимание уделяется снижению шума при программировании, DDD воздействует на семантический шум, а DSL - на синтаксический шум. Р>
Это может помочь понять мое мнение:
http://fragmental.tw/2009/03/12/expessive гребни-дизайн /
http://fragmental.tw/2008 / 04/20 / предметно-ориентированные языки-и-видео-игр /
Одним из элементов DDD можно считать способность разрабатывать повсеместно распространенные языки для общения с заинтересованными сторонами по поводу домена. Для подмножества тех UL, которые являются однозначными и потенциально исполняемыми, вы можете реализовать их с использованием внутреннего или внешнего DSL. Р>
Вот видео, где я обсуждаю это на сайте DomainDriven:
http://domaindrivendesign.org/library/bell_gitlevich_2009
С наилучшими пожеланиями, Питер
В Википедии есть довольно четкое определение для DSL :
Термин предметно-ориентированный язык (DSL) стал популярным в последнее время годы в разработке программного обеспечения для указать язык программирования или язык спецификации, посвященный конкретная проблемная область, представление конкретной проблемы техника и / или конкретный Техника решения.
Это может быть реализовано в виде набора классов по некоторому непротиворечивому шаблону, некоторой причудливой магии шаблонов C ++ или компилятора / парсера, который интерпретирует ввод свободного текста, чтобы делать то, что вы хотите.
Я думаю, что они как-то связаны (как выразился Кристоф), но это два совершенно разных аспекта. Я бы даже не отклонил заявление Джопа.
Очень хорошо написанная информация о DSL приведена на наборе страниц Мартина Фаулера о DSL (работа продолжается) ), вы можете начать с примера или Definition . Еще одно хорошее чтение - его QandA .
DDD основывается на модели предметной области и обычно по крайней мере на один уровень абстракции выше, чем DSL. Оба могут существовать без другого, и, как уже говорил Кристоф, оба могут использоваться в одном проекте.
Различия: один - это подход к построению систем, использующий язык предметно-ориентированного языка (DSL) вместо языка общего назначения, а другой - это архитектурный подход (DDD) к проектированию и созданию систем. Р>
Сходство в том, что они оба ориентированы на конкретный домен.
Википедия ( https://en.wikipedia.org/wiki/Domain-driven_designа>) имеет хороший ответ:
DDD специально не требует использования DSL, хотя это может быть используется, чтобы помочь определить DSL и поддерживать методы, такие как доменные multimodeling.