Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2017/11/28 松岡 幸一郎 ドメイン駆動設計用語解説 境界付けられたコンテキスト 概念編
Slide 2
Slide 2 text
● 松岡 幸一郎 ● @little_hand_s 発表者紹介
Slide 3
Slide 3 text
公式DDD Referenceの定義は以下の通りです。(和訳はだいぶ意訳しています) ・・・なかなかよくわからないですね。
Slide 4
Slide 4 text
● 2つの観点からの解説が必要 ○ 概念としての境界付けられたコンテキスト ○ 境界付けられたコンテキストをどう実装に落としこむか
Slide 5
Slide 5 text
● ドメイン駆動設計ではすべての人(ソフトウェア開発者、ドメインエキスパート)が同じ意 味で言葉を使うことを目指します。 ● 例えば、ECサイトで商品を販売するシステムを考えてみましょう。 ここでは、エンジニアと販売管理する人たちの中で、「商品」に関しては同じモデルを共 有します。
Slide 6
Slide 6 text
● エンジニアと販売部のコミュニケーションがうまくいき、「商品」について同じモデル、言 葉を共有することができました。 ● では、販売から配送までをシステム管理したくなったとします。
Slide 7
Slide 7 text
● おっと、配送部の人は「商品」と言った時に 全く別のものをイメージすることがわかりました。
Slide 8
Slide 8 text
● ドメイン駆動設計では、 すべての人が同じ意味で言葉を使うことを 目指すのではなかったのでしょうか? ● それでは強引に、「商品」の概念を統一しましょう。
Slide 9
Slide 9 text
● 『「商品」は売値、在庫数、配送先、配送状況を持ちます』・・・? なにやらややこしくなってきました。
Slide 10
Slide 10 text
● さらに、ドメイン駆動設計ではこれをコードに落とし込むことを目指すので、「商品」の振 る舞いを「商品」クラスに詰め込んでいくことに・・・ 上手くいくイメージが湧きますか? ● さらに、請求の管理までをシステム化することになり、 カウンターパートとして経理部の人も増えました。 ● 当然、経理の人は「商品」に関して違うイメージを持っています。
Slide 11
Slide 11 text
● さて、すべての人が同じ意味で言葉を使うことを目指す・・・ことは可能でしょうか?
Slide 12
Slide 12 text
● そう、システムが大規模になると、関係者すべてで統一したモデルを作ることは難しく なるのです。 ● エリック・エヴァンスのドメイン駆動設計で以下のようなことが語られています。
Slide 13
Slide 13 text
● そこで、ドメイン駆動設計では大きなシステムを 「境界付けられたコンテキスト」に分割し、 それぞれの中でモデル、言語の統一を目指すのです。
Slide 14
Slide 14 text
● コンテキストを分割することができました! 「販売コンテキスト」「配送コンテキスト」それぞれが 一つの「境界付けられたコンテキスト」になります。
Slide 15
Slide 15 text
● さて、販売と配送を別のコンテキストとして定義し、 「商品」を別のモデルにしましたが、現実的には「商品」は繋がっています。 ● ということは、このコンテキストをまたいで「商品」を どう扱うかを決めないといけません。
Slide 16
Slide 16 text
● このようなコンテキスト同士の関係性を簡単な図で表すことを、 コンテキストマッピングと言います。
Slide 17
Slide 17 text
● このように 1.モデリング対象を境界付けられたコンテキストで分割する 2.コンテキスト同士の関係をマッピングする という手順を踏むことが、ドメイン駆動設計の第一歩です。 ● なぜなら、ドメイン駆動設計では、 「ドメイン専門家とソフトウェア専門家のコラボレーションで モデルを探求する」ことを目指しますが、 「モデル」はまず適用するコンテキストを区切らないと定義できないからです。
Slide 18
Slide 18 text
● さて、ここまでで概念はおわかりいただけたと思います。 ● ただ、 「言いたいことはわかった、 でも結局どうやって実装するのか全然わからないよ」 という状況ですよね? ● 次の記事ではその実装について書きたいと思います。お楽しみに!
Slide 19
Slide 19 text
● ブログでは他にもいろいろなDDD解説記事を書いています!! ● http://little-hands.hatenablog.com/entry/top
Slide 20
Slide 20 text
ありがとうございました