はじめに
経緯など
【緩募】DDDを勉強したいと言ったら社内外で何人か興味を持ってくださり、集まって書籍を読むだけのもくもく読書会なるものを始めることにしました。一緒に読書に付き合ってくれる方募集中ですので、同じようにDDDに興味のある方はお気軽に連絡ください
— Shingo Yamazaki (@zaki___yama) 2017年6月19日
教材
最初に読む書籍はこれにした。IDDD 本などと呼ばれたりする。
おそらく「ドメイン駆動設計とは何か」を知るためには エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践) を最初に読んだ方がいいんだろうけど、
- IDDD本の方が発売日が新しく、取り上げているソフトウェアの例とかも馴染みやすいのではないか
- DDD 本はコードがほぼ出てこない(と聞いている)のでどうしても話が抽象的になりがちで、挫折するんじゃないか
という理由でこちらにした。
なお、後から気づいたんだけど CodeZine で IDDD 本をかいつまんで説明した連載記事があり、
各章に入る前に一度こちらの記事を読んでから書籍に入った方が理解が早い気がしている。
IDDD本から理解するドメイン駆動設計連載一覧:CodeZine(コードジン)
もくもく読書会の進め方
第1回は本当に手探りで、19 時に集まってだらだら喋った後 19:30 から各自その場でもくもくと読書。
20:30 過ぎぐらいから(力尽きたのもあって)読めた範囲についてお互いの理解を確かめるために自由なディスカッションとなった。
第1回で読んだ範囲
第2章から読み始めた。
2.11 あたりで頭に全然入ってこなくなったのでギブアップ。
学習メモ
以下、今回学んだことを個人的にメモ。
IDDD本の第2章「ドメイン」「サブドメイン」「境界づけられたコンテキスト」を読み解く (1/4):CodeZine(コードジン)
も一緒に読む。
キーワード
ユビキタス言語
ドメインエキスパート(そのドメインについて一番詳しい人)や開発者を含めたチーム全体で作り上げる共有言語のこと。
チーム全体で「A という用語は B という意味である」というぶれない共通認識を作り上げることが大切。
ドメイン
ドメインとは、広い意味で言うと、組織が行う事業やそれを取り巻く世界のことだ。
ソフトウェアを作るときには必ず対象となるビジネスがあるはずで、その領域のことだという理解。
コアドメイン、サブドメイン(支援サブドメイン、汎用サブドメイン)
ソフトウェアが対象とする事業領域を1つのドメインと捉えて全部入りのドメインモデルを構築すればいいかというとそうではなくて(むしろ逆で)、事業のドメインを分野ごとに適切に小さなドメインに分割していって、分割したドメインを組み合わせて全体を構築することになる。
この分割したドメインを コアドメイン/サブドメイン と呼ぶ。
コアドメイン はドメイン全体の中でも事業的に最も重要な部分。
ビジネス的に最も価値があり、他社との競争を行う上で差別化要因となる部分のこと?
コアドメインではない補助的な部分を サブドメイン と呼ぶ。
サブドメインはさらに、コアドメインほど需要ではないが業務に不可欠なものを 支援サブドメイン、業務上特別なことはないがシステム上必要なドメインを 汎用サブドメイン と呼ぶ。
境界づけられたコンテキスト
境界づけられたコンテキストは明示的な境界であり、ドメインモデルがどこに属するのかを表すものである。ドメインモデルは、ユビキタス言語をソフトウェアモデルとして表したものだ。
これがまだうまく言葉で説明できない。
別の書籍や web 上の解説を読むと「ユビキタス言語が適用できる範囲」などと言われてたりする。
例として本書では「アカウント」という用語を取り上げている。
アカウントという用語は、銀行取引コンテキストでは「口座」という意味になるが、文学コンテキストでは「報告書」という意味になる。
それぞれのアカウントの特徴は、名前だけでは区別できない。区別するには、それぞれが属する概念的なコンテナ、つまり境界づけられたコンテキストに注目する必要がある。これを見てはじめて、両者の違いを理解できるというわけだ。
境界づけられたコンテキスト内では、それぞれの用語はただ1つの意味を持つようになる。すなわち、ユビキタス言語が複数の意味を持たないようになる。
「境界づけられたコンテキスト」と「コアドメイン/サブドメイン」の関係性
上述したように境界づけられたコンテキストの中では用語についての意味がブレず、ただ1つに決まることが望ましい。ので、コアドメイン/サブドメインとは1:1の関係になることが望ましい設計といえる、はず。
わからなかったこと
ここで出てきた言葉や概念についてはなんとなくわかった気になれたが、結局
- ドメイン全体をどうやって定義し、そこからコアドメイン、サブドメインというようにどう分けていくか
- コアドメイン・サブドメインの中からいかにして境界づけられたコンテキストを形成していくか
- 境界づけられたコンテキストを元にどのようにドメインモデルを構築し、ソフトウェアの設計をするか
についてはわかっていない。最後の項目については後半で明らかになりそうだけど。
今後の予定
次回は 7/5(水) 19:00〜 にまた集まることになった。
順番にいくと次は2章の残りと3章なんだけど、これはもくもく会と言いつつ一度は各自で目を通してこないとついていけなくなるねーという話になり
できる範囲で読んでくることになった。
とばしてしまった1章も読んだ方がいい気がしてきたので、次回までに頑張って読みたい。。。!
参加者募集してますので、同じように DDD 興味あったけど今まで手を出せてなかったーとかって人がいたらぜひ一緒に勉強しましょう。お気軽にご連絡ください。
Slack グループ
読書会中に話したことをまとめたり、それ以外に書籍を読んでいてわからなかったことなどを共有するために Slack グループを作った。
https://iddd-mokumoku.herokuapp.com/
誰でも参加できるのでよかったらどうぞ。
実践DDD本読書会、とりあえず始動できたし次回につながりそうでよかった。正直全然わかんないんだけど一緒に話す人いると理解深まるし支えになる。
— Shingo Yamazaki (@zaki___yama) 2017年6月23日