ドメイン固有言語(DSL)およびドメイン駆動設計(DDD)
-
05-07-2019 - |
質問
ドメイン固有言語(DSL)とドメインドリブンデザイン(DDD)の違いと類似点は何ですか?
解決
ドメイン駆動設計(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 ++テンプレートマジック、または自由なテキスト入力を解釈して目的の処理を行うコンパイラ/パーサーに従う一連のクラスとして実装できます。
それらは(クリストフが言ったように)何らかの関係があると思いますが、2つのまったく異なる側面です。 jopの発言も却下しません。
DSLに関する非常によく書かれた情報については、 DSL上のマーティンファウラーの一連のページ(作業中)を参照してください。 )、例、または定義。別の良い読み物は、彼の QandA です。
DDDはドメインモデルに基づいており、通常、DSLよりも少なくとも1つの抽象化レベルが高くなっています。どちらも他方なしで存在でき、クリストフがすでに言ったように、両方を同じプロジェクトで使用できます。
違いは、1つは汎用言語の代わりにドメイン固有言語(DSL)を使用してシステムを構築するアプローチであり、もう1つはシステムを設計および構築するアーキテクチャアプローチ(DDD)です。
類似点は、どちらも特定のドメインに焦点を当てていることです。
ウィキペディア( https://en.wikipedia.org/wiki/Domain-driven_design)良い答えがあります:
DDDは、DSLの使用を特に必要としませんが、 DSLを定義し、ドメイン固有のようなメソッドをサポートするために使用されます マルチモデリング。