ドメイン固有言語 (DSL) とドメイン駆動設計 (DDD) の違いと類似点は何ですか?
10 に答える
ドメイン駆動設計 (DDD) は、問題とその解決策について考え、伝える方法です。
ドメイン固有言語 (DSL) は、コードを記述する方法です。
どちらも「ドメイン」という単語で始まるため、似ています。それだけだと思います。:-)
ドメイン駆動設計では、設計対象のシステムの基本的な語彙、概念、およびオブジェクト モデルを作成するときに、問題ドメインの役割を強調します。
ドメイン固有言語は、システムの特定の部分を指定または実装するための表記法であり、そのドメインの実践者のニーズに合わせたものです (つまり、ほとんどのプログラミング言語または仕様言語の「プログラマー」の側面を最小限に抑えます)。
それらは「ドメイン」という言葉だけでなく、何らかの形で関連していると私は主張します。優れた (ドメイン主導の) 設計ができたら、確かな DSL を作成するのに役立ちます。
「DDD は、DSL の定義を支援するために使用できますが、DSL の使用を特に必要としません。」- ウィキペディア
どちらもプログラミングのノイズを減らすことに重点を置いていると思います。DDD はセマンティック ノイズに作用し、DSL は構文ノイズに作用します。
これらは私の意見を理解するのに役立つかもしれません:
http://fragmental.tw/2009/03/12/expessive-design-slides/
http://fragmental.tw/2008/04/20/domain-specific-languages-and-video-games/
DDD の 1 つの要素は、ドメインについて利害関係者と対話するためのユビキタス言語を開発する能力と見なすことができます。明確で潜在的に実行可能な UL のサブセットについては、内部または外部 DSL を使用して実装することを選択できます。
以下は、DomainDriven サイトでこれについて話しているビデオです。
http://domaindrivendesign.org/library/bell_gitlevich_2009
よろしくお願いします、ピーター
ウィキペディアにはDSLのかなり明確な定義があります。
ドメイン固有言語 (DSL) という用語は、特定の問題ドメイン、特定の問題表現技法、および/または特定の解決技法専用のプログラミング言語または仕様言語を示すために、ソフトウェア開発において近年一般的になってきました。
これは、いくつかの一貫したパターン、いくつかの凝った C++ テンプレート マジック、または自由なテキスト入力を解釈して必要なことを行うコンパイラ/パーサーに従う一連のクラスとして実装できます。
違いは、1 つは汎用言語の代わりにドメイン固有言語 (DSL) を使用してシステムを構築するアプローチであり、もう 1 つはシステムを設計および構築するためのアーキテクチャー アプローチ (DDD) です。
類似点は、どちらも特定のドメインに焦点を当てていることです。
私はそれらが何らかの形で関連していると思います (クリストフが言ったように) が、2 つの完全に異なる側面です。ヨップの発言を否定するつもりはありません。
DSL に関する非常によく書かれた情報については、Martin Fowler の DSL に関する一連のページ(作業中) を参照してください。例または定義から始めることができます。もう 1 つの良い読み物は、彼のQandAです。
DDD はドメイン モデルに基づいており、通常は DSL より少なくとも 1 つ高い抽象化レベルです。両方とも、もう一方がなくても存在できます。クリストフがすでに言ったように、同じプロジェクトで両方を使用できます。