ドメインモデルとドメイン特化言語、そしてドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~

フレームワークが提供するドメインモデルとドメイン特化言語の関係について杉本氏 @sugimoto_kei のツイートをまとめています。
5
杉本啓 @sugimoto_kei

ソフトウェアのフレームワークでは、全体の枠組みをフレームワークが提供し、その中に嵌め込む可変部分を利用側が書くという構成が多い。こうすると、可変部分は単純化され宣言的/関数的に記述し易くなる。この方式は業務用アプリケーションにも適用できるし、大きなポテンシャルを持っていると思う。

2015-10-22 15:57:24
杉本啓 @sugimoto_kei

…この方式を採用したとして、可変部分の記述に大きな自由度を与えようとするとそれはDSL化してくる。そうしたDSLはドメインモデルに立脚している。と同時に、可変部分であるDSL記述が不変部分であるドメインオブジェクトに埋め込まれることになる。RT @sugimoto_kei

2015-10-22 17:40:01
杉本啓 @sugimoto_kei

...だから、DSLとドメインモデルは相互に依存している。前者は後者に立脚し後者は前者を取り込む。別に難しくはない。Excel のDSLである式は、ドメインモデルに属するシートやセルの概念に立脚している。と同時に、セルは計算式を取り込む。@sugimoto_kei

2015-10-22 18:14:26
杉本啓 @sugimoto_kei

...「DSL埋め込み」が進んでくると、DSLとモデルの関係性が逆転してくる。モデルの中に埋め込まれた部分的な可変性を表すのがDSLなのに、ある場面では、DSLの方が強く認識され、ドメインオブジェクトは、その中で使用できる道具立てのように見えてくる。@sugimoto_kei

2015-10-22 18:35:16
杉本啓 @sugimoto_kei

ここまでいくと、そのドメインモデルとDSLは領域に特化したハイレベルのシステム開発環境と言ってよい。興味深いのは、このレベルに達すると、DSLによる設定内容は、それ自体、ドメインモデルと言ってよい程度の可変性と精妙さを備えているだろうことだ。 RT @sugimoto_kei

2015-10-22 19:05:07
杉本啓 @sugimoto_kei

...DSLは結局、モデルに立脚する一方、モデルに含まれる高水準の概念を用いて利用者が自らのドメインモデルを構築することを可能にする触媒になる。もちろん全てのDSLがそうでなくてはならないわけではないが、DSLの記述力が高まるにつれそうなっていく。@sugimoto_kei

2015-10-22 20:09:19
杉本啓 @sugimoto_kei

勿論、汎用言語もさらに高水準化していくだろう。しかし特定領域への適用においてはその領域に特化したDSLに分がある。特化した方が、前提として取り込める知識の量が大きいからだ。DSLの開発コストを正当化するマーケットニーズの存在がカギだけれども。RT @sugimoto_kei

2015-10-22 20:18:11
杉本啓 @sugimoto_kei

さて、こんな風になったとして何がよいか。まず、インフラ/DSLを作る人々と、その上で独自のシステムを作る人々を切り分けることが出来る。2つの領域内で、「上流」と「下流」を分かつ必要はない。自分でモデルを作り自分で実装し、成功も失敗も自分のものである。@sugimoto_kei

2015-10-22 20:47:36
杉本啓 @sugimoto_kei

自分の中でフィードバックループを完結させることが非常に大切。責任を転嫁できる相手がいれば責任を転嫁したくなる。公に言わなくとも心の中で転嫁する。道義は別にしても、それでは何もよくならない。今の開発方式では、ループを閉じるのが極めて難しい。そこが変わる。@sugimoto_kei

2015-10-22 20:59:31
杉本啓 @sugimoto_kei

次に、もっと重要かもしれないのは、ドメインモデルが2層に分かれることで、モデルに対するオーナーシップが変わる点だ。すなわち、ドメイン特化(すなわちそのドメイン内で共通の)モデル/DSLはエンジニアが作り、その上で、ユーザが自らのモデルを作る。 RT@sugimoto_kei

2015-10-22 23:54:58
杉本啓 @sugimoto_kei

この図式の中で、DSLとそれを支えるモデルのオーナーは技術者である。もちろんそれらを作る上では現場のユーザからのインプットが重要だが、最終的に設計判断するのは技術者となる。そしてそのモデルの良否に基づいて技術者企業は市場で競争する。@sugimoto_kei

2015-10-23 00:03:56
杉本啓 @sugimoto_kei

このような競争は、技術者をニーズに対して鋭敏にさせ、技術とニーズの間に今までにないレベルの結合を促すと思う。シュンペーター言うところの「新結合」すなわち「革新」だ。@sugimoto_kei

2015-10-23 00:10:02
杉本啓 @sugimoto_kei

技術者は、単に電子的情報処理技術の専門家であるだけでなく、それを社会の仕組みと仕事の仕組みに適用すればどんなことが可能になるのを、それぞれの得意とするドメインに関する深い知識を踏まえつつ考える人々になる。RT @sugimoto_kei

2015-10-23 00:14:20
杉本啓 @sugimoto_kei

そしてユーザ(とたぶんそれを支援するコンサルタント)は、技術者が提供する基盤モデルに依拠しつつ、現実のビジネスに即したソリューションを考え、かつ実装する。その過程で、常に、基盤モデルに新たなチャレンジを突き付ける。RT @sugimoto_kei

2015-10-23 00:17:36
杉本啓 @sugimoto_kei

ドメイン駆動という言葉で僕が考えるのは、こんなイメージです。そしてこのイメージで重要なのは、これを実現するために、別に「業界」が変わる必要はないということです。ひとりでも始めることができる。@sugimoto_kei

2015-10-23 00:22:48
杉本啓 @sugimoto_kei

実際、このイメージは、僕が12年前に fusion_place を始めた時に考えたそのままです。それをDDDの言葉に焼き直したに過ぎない。そして、fusion_place は少しずつですが支持を頂き始めている。だから... RT @sugimoto_kei

2015-10-23 00:28:09
杉本啓 @sugimoto_kei

同じように考えて何かを始める人が何人かでもいれば、このような世界は少しずつ広がり始め、やがては当たり前のことになると思うのです。僕たちは、「業界」やお客さんを変える必要はない。自分が変わればよい、と思うのです。RT @sugimoto_kei

2015-10-23 00:30:35
杉本啓 @sugimoto_kei

以上、DDDについてのビジョンでした。説明不足の点は次の2つの資料をご覧ください。slideshare.net/ssuser8e5e71/s… slideshare.net/ssuser8e5e71/k… @sugimoto_kei

2015-10-23 00:33:09