集約
ビジネスデータ
と
ビジネスロジック
を
カプセル化
した
ValueObject
を組み合わせて
複雑なビジネスロジック
の
構造
を表現する
クラス
.
オブジェクト指向
では複数の
オブジェクト
がまとめられてひとつの
オブジェクト
になる.
この
グループ
には維持するべき
不変条件
が存在する.
集約
は
不変条件
を維持する単位として切り出される.
境界
と
ルート
が存在する.
境界
:
集約
に何が含まれるかを定義するためのもの.
ルート
:
集約
が含まれる特定の
オブジェクト
.
外部
から
集約
に対する操作は
集約ルート
を経由して行われる.
境界
内部の
オブジェクト
を外部に曝け出さないことで
不変条件
を維持する.
「
User
->
UserId
and
UserName
」がひとつの
集約
の例.
User
は
UserId
や
UserName
を直接公開しない.
ECサイト
における
送料
の計算は
競争優位性
につながる
複雑なビジネスロジック
である.
code:ShippingCharge.java
// 単純な集約の例
class ShippingCharge {
// 送料計算に必要な値
Product product;
ShipTo shipTo;
Amount total() {
// 値オブジェクトを組み合わせた送料の計算
}
}