Nhiều lần các đối tượng kinh doanh của tôi có xu hướng gặp phải tình huống thông tin cần vượt qua ranh giới đối tượng quá thường xuyên. Khi thực hiện OO, chúng tôi muốn thông tin nằm trong một đối tượng và càng nhiều càng tốt tất cả các mã xử lý thông tin đó phải nằm trong đối tượng đó. Tuy nhiên, các quy tắc kinh doanh không tuân theo nguyên tắc này mang lại cho tôi rắc rối.
Như một ví dụ giả sử rằng chúng ta có một Đơn hàng có một số OrderItems đề cập đến một InventoryItem có giá. Tôi gọi Order.GetTotal () tính tổng kết quả của OrderItem.Getprice () nhân số lượng của InventoryItem.Getprice (). Càng xa càng tốt.
Nhưng sau đó chúng tôi phát hiện ra rằng một số mặt hàng được bán với giá hai cho một giao dịch. Chúng ta có thể xử lý việc này bằng cách yêu cầu OrderItem.Getprice () làm một cái gì đó như InventoryItem.Getprice (số lượng) và để InventoryItem giải quyết việc này.
Tuy nhiên, sau đó chúng tôi phát hiện ra rằng thỏa thuận hai đối một chỉ kéo dài trong một khoảng thời gian cụ thể. Khoảng thời gian này cần được dựa trên ngày đặt hàng. Bây giờ chúng tôi thay đổi OrderItem.Getprice () thành InventoryItem.Getprice (quatity, order.GetDate ())
Nhưng sau đó, chúng tôi cần hỗ trợ các mức giá khác nhau tùy thuộc vào thời gian khách hàng đã ở trong hệ thống: InventoryItem.Getprice (số lượng, order.GetDate (), order.GetCustomer ())
Nhưng sau đó, hóa ra các giao dịch hai đối một không chỉ áp dụng cho việc mua nhiều mặt hàng tồn kho giống nhau mà là nhiều giao dịch cho bất kỳ mặt hàng nào trong InventoryC Category. Tại thời điểm này, chúng tôi giơ tay và chỉ đưa cho InventoryItem mục đặt hàng và cho phép nó đi qua biểu đồ tham chiếu đối tượng thông qua các bộ truy cập để có được thông tin về nhu cầu của nó: InventoryItem.Getprice (cái này)
TL; DR Tôi muốn có sự kết nối thấp trong các đối tượng, nhưng các quy tắc kinh doanh thường buộc tôi phải truy cập thông tin từ khắp mọi nơi để đưa ra quyết định cụ thể.
Có kỹ thuật tốt để đối phó với điều này? Những người khác tìm thấy cùng một vấn đề?