Sering kali objek bisnis saya cenderung memiliki situasi di mana informasi perlu melewati batas objek terlalu sering. Saat melakukan OO, kami ingin informasi berada di satu objek dan sebanyak mungkin semua kode yang berurusan dengan informasi itu harus berada di objek itu. Namun, aturan bisnis tidak mengikuti prinsip ini yang membuat saya kesulitan.
Sebagai contoh, misalkan kita memiliki Pesanan yang memiliki sejumlah ItemItem yang merujuk pada InventoryItem yang memiliki harga. Saya meminta Order.GetTotal () yang merangkum hasil dari OrderItem.GetPrice () yang mengalikan kuantitas dengan InventoryItem.GetPrice (). Sejauh ini bagus.
Tetapi kemudian kami menemukan bahwa beberapa barang dijual dengan dua untuk satu transaksi. Kita dapat menangani ini dengan meminta OrderItem.GetPrice () melakukan sesuatu seperti InventoryItem.GetPrice (jumlah) dan membiarkan InventoryItem berurusan dengan ini.
Namun, kemudian kami mengetahui bahwa kesepakatan dua-untuk-satu hanya berlangsung selama periode waktu tertentu. Periode waktu ini harus didasarkan pada tanggal pesanan. Sekarang kita mengubah OrderItem.GetPrice () menjadi InventoryItem.GetPrice (quatity, order.GetDate ())
Tapi kemudian kita perlu mendukung harga yang berbeda tergantung pada berapa lama pelanggan dalam sistem: InventoryItem.GetPrice (jumlah, pesanan.GetDate (), pesanan.GetCustomer ())
Tetapi kemudian ternyata bahwa dua-untuk-satu transaksi berlaku tidak hanya untuk membeli beberapa item persediaan yang sama tetapi juga beberapa untuk setiap item dalam InventoryCategory. Pada titik ini kita angkat tangan dan hanya memberikan barang pesanan InventoryItem dan memungkinkannya untuk melakukan perjalanan di atas grafik referensi objek melalui pengakses untuk mendapatkan informasi kebutuhannya: InventoryItem.GetHarga (ini)
TL; DR Saya ingin memiliki objek kopling rendah, tetapi aturan bisnis sering memaksa saya untuk mengakses informasi dari semua tempat untuk membuat keputusan tertentu.
Apakah ada teknik yang baik untuk menangani ini? Apakah orang lain menemukan masalah yang sama?