第1回 に続いて第2回も無事に開催することができました。
※社外からの参加者もお待ちしています(Slack グループ)
教材
書籍に加え、前回見つけた CodeZine の解説記事
今回は書籍の前に目を通したが、最初に概要を掴んでから書籍に入れるので効果的。今後もこの進め方でいきたい。
第2回で読んだ範囲
第3章を一通り。この章はボリュームが小さくて助かった。
学習メモ
第2章で「境界づけられたコンテキスト」を学んだが、「コンテキストマップ」は複数の「境界づけられたコンテキスト」の関係を俯瞰する図となる。
抽出したコンテキストを線で結び、互いの関係性を整理していくイメージ。
(図は書籍より引用)
2 つのコンテキスト間にはどちらかが上流(Upstream)でどちらかが下流(Downstream)という関係がある。図中には U または D で書く。
プロジェクトの現状を示す図。こうあって欲しいという将来の図ではない。
コンテキストマップを書く理由
http://codezine.jp/article/detail/9837 より引用。
コンテキストマップを描くことによって、システム間の関係を適切に把握できるメリットがあります。DDDチームは既存システムとの連携方法を把握でき、他チームとのコミュケーションの必要性を判断できるようになります。
コンテキストマップはアーキテクチャ図というよりも、チーム間のコミュケーション関係を示す図の意味合いが強くなります。コンテキストマップは組織間の問題を見つけ出せる唯一のドキュメントとなるため、プロジェクトの成功に不可欠といわれています。
コンテキストマップの分類
境界づけられたコンテキスト間の関係には、いくつか名前の付いた種類がある。
これは CodeZine で解説されているように、まず大分類として
- チーム間の関係を示す「組織パターン」
- データとプログラムの連携方法を示す「統合パターン」
に分けて考えると理解しやすい。(書籍では全部いっしょくたにしているが)
- チーム間の関係を示す「組織パターン」
- データとプログラムの連携方法を示す「統合パターン」
コンテキストの分析と統合ポイント
境界づけられたコンテキストが適切に分割されているかを分析し、複数の概念が 1 つのコンテキストの中に混じっていた場合は Brandolini の記法では三角の警告アイコンを記載する。
(図は書籍より引用)
ディスカッションメモ
- OHS と PL のどちらか一方だけしか使われないことってあるんだろうか
→ あんまりなさそう
- 競合ポイントはどうやって見つけるのか
書籍に出てきた図が(ひょうたん型になっていて)恣意的な感じが...
- リモートモデル、ローカルモデルとかのくだりがよくわからない
自立性を確保するには、依存するオブジェクトの状態をローカルシステム側に保持しておけばいい。依存するオブジェクト全体をキャッシュしておけばいいと考える人もいるかもしれない。しかし、DDDでは、この考え方は一般的ではない。その代わりに、ローカルのドメインオブジェクトを作って外部のモデルをそれに変換し、ローカルのモデルに必要な最小限の状態だけを保持する。
→ たとえば、GitHub API を使って Issue 管理アプリを作るとき、
- API で Issue を GET した結果のプロパティをアプリ内で全部保持するわけはなく、実際には必要なものだけ保持するはず
- API に仕様変更があったときにも影響を最小限にするため、レスポンスをそのまま使うのではなく何らかのオブジェクトに変換して使うはず(ACL にもなる)
というわけで、API のレスポンスを加工してアプリ内で使うためのモデルに変換する、というのはここに記載されたことそのものズバリな気がする。
次回
7/21(金)19:00 頃からやります。
資料
見つけたものをどんどん追加していきます。