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