引き続き第15章を読みました。読むペースが落ちてきている。蒸留モデルから本質的なものを抽出し、価値を高めるプロセスのこと。コアドメインシステムが大きくなると、コンポーネントが増え、本質が見えづらくなる。開発者は本質が見えないと変更しづらい。変更をスムーズに行うには特定領域を熟知する必要がある。複数あるサブドメインの中でも中心的なものをコアドメインと呼ぶ。コアドメインを周辺領域から区別する手段を講じる。コアドメインは小さくする。コアドメインはアプリケーションを差別化するビジネス資産であるため、最も才能のある開発者に担当させ、しなやかな設計を達成する。コアドメインは1つとは限らない。ドメインに対する関心が強く、長い間ドメインとともに歩もうと考えている開発者たちと、ドメインエキスパートのチームでコアドメインを作成する。ドメイン知識は蓄積する必要があるため、コアドメインの作成を外部に頼むことや、コアドメインを購入することは実践的ではない。汎用サブドメイン本質的ではないが、汎用的であり、確実にドメインモデルの一部を構成するものは汎用ドメインとして切り出す。凝集度の高い部分を識別し、汎用的なモデルとして別モジュールにすることで汎用サブドメインを抽出できる。汎用サブドメインよりコアドメインの開発を優先するべきだ。汎用サブドメインは買ってくることや、公開されているモデルの採用を検討するべきだ。外部に頼むのも選択肢に入る。汎用サブドメインの再利用性を気にしすぎないこと。再利用性を実現するには投資が必要だが、優先的にコアドメインに投資するべきだ。アジャイルではリスクを早期に減らしていくが、コアドメインモデリングのリスクは低く見積もられがちなので注意。ドメインビジョン声明文コアドメインとその価値についての簡潔な(約1ページ)記述。コアドメインについての意識を高めるのに役立つ。差別化要素ではないものは無視するUI、外部システムインタフェース、使用技術、プロジェクト運営方法などはドメインビジョン声明文に入るべきではないスコープを広げすぎないプロジェクト早期に作る新しい洞察を得たら改定する強調されたコアコアドメインをコード上で切り離す行為。コアに対する認識が深まっていない状態で、いきなり切り離そうとするのは実用的ではない。認識を深めるテクニックとして次の2つがある。蒸留ドキュメント本質的な概念オブジェクト群とその間の主要な相互作用だけを記載したドキュメントドキュメントの維持や理解にかかるコスト、複雑さを増やさないために、コアの境界を説明する最小限のドキュメントとするのがよいコアにフラグを立てる既存ドキュメントのコア部分にフラグ(マーク)をつける蒸留ドキュメントはコードとモデルを変更する際の指針として使える。切り分けることで、コアを際立たせることができる。汎用サブドメインは表現力をもつモデルであり、チームの視点を反映している。メカニズムは処理を担当する。隔離されたコアモデルから汎用サブドメインやメカニズムを抽出していく方法では、コアは抽出の抜け殻のほうに存在する。こちらはコアを抽出する手法。重要で巨大な境界づけられたコンテキストがあり、補助機能によって本質がわかりづらいときには、コアを隔離するべきだ。隔離されたコアで作業すると、本質に対する洞察が深まることがある。洞察はチームで共有しする。個人で行動することはできない。抽象化されたコア多態的なインタフェースがドメインの概念と一致するときには、抽象クラスやインタフェースでの抽出を試みる価値がある。抽出したものは別のモジュールにまとめ、実装クラスをサブドメイン置く。前章(第14章)はコンテキストの境界を明らかにする方法を探った。本章(第15章)はドメインを分割して理解しやすくしようという試み。人間の認識力の限界を超えないように、如何に分割統治するか、という方法論だ。IDDD本の第2章「ドメイン」「サブドメイン」「境界づけられたコンテキスト」を読み解くによれば、境界づけられたコンテキストは解決領域であり、コアドメイン、サブドメインは問題領域に位置づけられる。この分類によれば本章は問題分析の方法について述べていることになる。実際には、コアドメイン、サブドメインに対応するモデルや実装のリファクタリングに対する言及があるため、問題領域と解決領域の両方にまたがった言及というふうに理解している。サブドメインが発見されることによりサブ言語が定義され、サブコンテキストが発生するのだろう(読み間違ってたら教えて)。コアドメインこそがビジネスの根幹だが、それをやりたがる熟練開発者は少ない、という点は興味深い。開発者さん、ビジネスに敏感になろう。汎用サブドメインを認識することで外部調達の可能性が開ける点は認識しておきたい。買ってこれるなら買ってきたほうがいいよね。弊社では、DDDによる...2017-05-02Tableauテクニックどうも西山です。