Доменно-ориентированные языки (DSL) и доменно-ориентированный дизайн (DDD)

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
0
3 736
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Ответ принят как подходящий

Domain Driven Design (DDD) - это способ думать и сообщать о проблемах и способах их решения.

Доменно-специфический язык (DSL) - это способ написания кода.

Они похожи, потому что оба начинаются со слова «домен». Думаю, это все. :-)

Хотя это забавно, я думаю, что этот ответ несколько неточен. DSL будет использовать тот же самый распространенный язык, что и вы, практикуя DDD для того же домена, они не совсем не связаны друг с другом.

Roger Johansson 08.10.2010 13:42

Я бы сказал, что они как-то связаны, и не только словом «домен». Если у вас есть хороший (доменно-ориентированный) дизайн, он, несомненно, поможет в создании надежного 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.

Другие вопросы по теме