多くの場合、私のビジネスオブジェクトは、情報がオブジェクトの境界を頻繁に越える必要がある状況にあります。オブジェクト指向を実行するときは、情報を1つのオブジェクトに入れ、その情報を処理するすべてのコードをできるだけそのオブジェクトに含める必要があります。ただし、ビジネスルールはこの原則に従っていないため、問題が発生します。
例として、価格を持つInventoryItemを参照するOrderItemの数を持つOrderがあるとします。数量をInventoryItem.GetPrice()で乗算するOrderItem.GetPrice()の結果を合計するOrder.GetTotal()を呼び出します。ここまでは順調ですね。
しかし、その後、一部の商品が2対1で販売されていることがわかりました。OrderItem.GetPrice()にInventoryItem.GetPrice(quantity)のような処理を行わせ、InventoryItemにこれを処理させることで、これを処理できます。
ただし、2対1の取引は特定の期間のみ続くことがわかります。この期間は、注文の日付に基づく必要があります。次にOrderItem.GetPrice()をInventoryItem.GetPrice(quatity、order.GetDate())に変更します。
ただし、お客様がシステムに滞在している期間に応じて、さまざまな価格をサポートする必要があります。
しかし、2対1の取引は、同じ在庫アイテムを複数購入するだけでなく、InventoryCategory内のアイテムの複数購入にも適用されることがわかります。この時点で、私たちは手を挙げて、InventoryItemに注文アイテムを与え、それがアクセサーを介してオブジェクト参照グラフ上を移動できるようにし、必要な情報を取得します:InventoryItem.GetPrice(this)
TL; DRオブジェクトの結合を低くしたいのですが、ビジネスルールでは、特定の決定を行うために、多くの場合、どこからでも情報にアクセスする必要があります。
これに対処するための良いテクニックはありますか?他の人が同じ問題を見つけますか?