หลายครั้งที่วัตถุธุรกิจของฉันมักจะมีสถานการณ์ที่ข้อมูลจำเป็นต้องข้ามขอบเขตวัตถุบ่อยเกินไป เมื่อทำ OO เราต้องการให้ข้อมูลอยู่ในวัตถุเดียวและมากที่สุดเท่าที่เป็นไปได้รหัสทั้งหมดที่เกี่ยวข้องกับข้อมูลนั้นควรอยู่ในวัตถุนั้น อย่างไรก็ตามกฎเกณฑ์ทางธุรกิจไม่ได้ปฏิบัติตามหลักการนี้ทำให้ฉันมีปัญหา
ตัวอย่างเช่นสมมติว่าเรามีคำสั่งซื้อที่มีหมายเลขของ OrderItems ซึ่งอ้างถึง InventoryItem ซึ่งมีราคา ฉันเรียกใช้ Order.GetTotal () ซึ่งสรุปผลของ OrderItem.GetPrice () ที่ทวีคูณปริมาณโดย InventoryItem.GetPrice () จนถึงตอนนี้ดีมาก
แต่จากนั้นเราพบว่าบางรายการมีการขายสองรายการต่อการจัดการหนึ่งรายการ เราสามารถจัดการสิ่งนี้ได้โดยให้ OrderItem.GetPrice () ทำบางอย่างเช่น InventoryItem.GetPrice (ปริมาณ) และปล่อยให้ InventoryItem จัดการกับสิ่งนี้
อย่างไรก็ตามเราพบว่าดีลแบบสองต่อหนึ่งนั้นมีระยะเวลาที่ จำกัด เท่านั้น ช่วงเวลานี้จะต้องเป็นไปตามวันที่สั่งซื้อ ตอนนี้เราเปลี่ยน OrderItem.GetPrice () เป็น InventoryItem.GetPrice (quatity, order.GetDate ())
แต่เราต้องสนับสนุนราคาที่แตกต่างกันขึ้นอยู่กับระยะเวลาที่ลูกค้าอยู่ในระบบ: InventoryItem.GetPrice (ปริมาณ, คำสั่งซื้อ GetDate (), คำสั่งซื้อ GetCustomer ())
แต่กลับกลายเป็นว่าข้อเสนอแบบสองต่อหนึ่งนั้นไม่ได้มีเพียงแค่การซื้อหลายรายการในสินค้าคงคลังเดียวกัน แต่ยังมีอีกหลายรายการสำหรับสินค้าใด ๆ ในประเภทสินค้าคงคลัง ณ จุดนี้เรายกมือขึ้นและให้รายการสั่งซื้อ InventoryItem และอนุญาตให้มันเดินทางผ่านกราฟอ้างอิงวัตถุผ่าน accessors เพื่อรับข้อมูลที่ต้องการ: InventoryItem.GetPrice (นี่)
TL; DR ฉันต้องการมีเพศสัมพันธ์ต่ำในวัตถุ แต่กฎเกณฑ์ทางธุรกิจมักจะบังคับให้ฉันเข้าถึงข้อมูลจากสถานที่ต่างๆเพื่อตัดสินใจโดยเฉพาะ
มีเทคนิคที่ดีในการจัดการกับเรื่องนี้หรือไม่? คนอื่นพบปัญหาเดียวกันหรือไม่