종종 비즈니스 객체에는 정보가 객체 경계를 너무 자주 넘어야하는 상황이 있습니다. OO를 수행 할 때는 정보가 하나의 객체에 있고 가능한 한 해당 정보를 처리하는 모든 코드가 해당 객체에 있어야합니다. 그러나 비즈니스 규칙은이 원칙을 따르지 않아 문제가 발생합니다.
예를 들어 가격이있는 InventoryItem을 나타내는 많은 OrderItem이있는 Order가 있다고 가정합니다. InventoryItem.GetPrice ()로 수량을 곱하는 OrderItem.GetPrice ()의 결과를 합산하는 Order.GetTotal ()을 호출합니다. 여태까지는 그런대로 잘됐다.
그러나 우리는 일부 품목이 한 거래에 2 개로 판매되는 것을 발견했습니다. OrderItem.GetPrice ()가 InventoryItem.GetPrice (Quantity)와 같은 작업을 수행하고 InventoryItem이이를 처리하게함으로써이를 처리 할 수 있습니다.
그러나 일대일 거래는 특정 기간 동안 만 지속됩니다. 이 기간은 주문 날짜를 기준으로해야합니다. 이제 OrderItem.GetPrice ()를 InventoryItem.GetPrice (quatity, order.GetDate ())로 변경하십시오.
그러나 고객이 시스템에 얼마나 오래 있었는지에 따라 다른 가격을 지원해야합니다. InventoryItem.GetPrice (Quantity, order.GetDate (), order.GetCustomer ())
그러나 일대일 거래는 동일한 인벤토리 항목을 여러 개 구매하는 것뿐만 아니라 InventoryCategory의 모든 항목을 여러 개 구매하는 경우에도 적용됩니다. 이 시점에서 우리는 손을 내밀어 InventoryItem에 주문 항목을 제공하고 접근자를 통해 객체 참조 그래프 위로 이동하여 필요한 정보를 얻도록 허용합니다. InventoryItem.GetPrice (this)
TL; DR 객체에서 낮은 결합을 원하지만 비즈니스 규칙에 따라 특정 결정을 내리기 위해 모든 곳에서 정보에 액세스해야하는 경우가 종종 있습니다.
이것을 다루는 좋은 기술이 있습니까? 다른 사람들도 같은 문제를 발견합니까?