Домен-специфические языки (DSL) и доменно-управляемый дизайн (DDD)

StackOverflow https://stackoverflow.com/questions/177628

Вопрос

В чем различия и сходства между предметно-ориентированными языками (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) к проектированию и созданию систем.

Сходство в том, что они оба ориентированы на конкретный домен.

scroll top