DDD / Abstract Core


Abstract Core (P.435)

担当は本間(id:hiratara)です。

要約

ABSTRACT CORE

通常はCORE DOMAINモデルでも詳細を含み過ぎていて、全容を伝えるのは難しい。

***

大きなモデルをMODULESとして小さなサブドメインに分割すると、複雑なモデルでも管理できるようになるが、サブドメイン間の相互作用は曖昧になったり複雑にさえなったりする。

異なるMUDULES間のサブドメインで相互作用がたくさんあると、MODULES間に大量の関連が作られるか、相互作用が間接的になってモデルが曖昧になるかのどちらかである。

ポリモフィズムによって抽象型のインスタンスの詳細を無視することができる。モジュール間の相互作用がインタフェースのレベルで表されるのなら、これらの型を特別なCORE MODULEにリファクタリングするのは意味があるだろう。

これは技術的な技法ということではなく、インタフェースがドメインの基礎概念と一致する時だけ価値がある。この場合、CORE DOMAINをより小さく充実させると同時に、抽象化がMODULEを分離する。

Therefore:

モデルの基礎的な概念を識別し、確かなクラス、抽象クラス、インタフェースに分離しなさい。抽象モデルを重要なコンポーネント間の相互作用を最も表現できるように設計しなさい。特化された実装の詳細クラスをサブドメインのMODULESに残しておいて、抽象モデルの全部を独自のMODULEとしなさい。

特化されたクラスの大多数は他の特化されたMODULESではなく、ABSTRACT CORE MODULEと関連する。ABSTRACT CORE は主な概念とその相互作用について簡潔な視点を与える。

ABSTRACT COREの分離作業は機械的にできるものではなく、モデリングするには主概念とそれらのシステム内での主な相互作用を深く知っている必要がある。違う言葉で言うと、これは深い洞察へのリファクタリングの例であり、大抵は大きな再設計を必要とする。

ABSTRACT COREは最終的にはよく蒸留されたドキュメントのような形で終わるべきである。もちろんABSTRACT COREはコード化され、それによってより厳密に、より完全になる。

***

担当者のつぶやき

みんなの突っ込み


まとめ (議事録)