Çoğu zaman iş nesnelerim, bilginin nesne sınırlarını çok sık aşması gereken durumlara sahip olma eğilimindedir. OO yaparken, bilgilerin bir nesnede olmasını ve bu bilgilerle ilgili tüm kodların o nesnede olabildiğince fazla olmasını istiyoruz. Ancak iş kuralları bu ilkeye uymuyor ve bana sorun çıkarıyor.
Örnek olarak, bir fiyatı olan bir InventoryItem anlamına gelen bir dizi OrderItems içeren bir Siparişimiz olduğunu varsayalım. InventoryItem.GetPrice () ile bir miktarı çarpan OrderItem.GetPrice () sonucunu toplayan Order.GetTotal () işlevini çağırıyorum. Çok uzak çok iyi.
Ama sonra bazı eşyaların bir anlaşma için iki ile satıldığını öğreniyoruz. OrderItem.GetPrice () öğesinin InventoryItem.GetPrice (miktar) gibi bir şey yapmasını ve InventoryItem'in bununla ilgilenmesine izin vererek bunu halledebiliriz.
Ancak, iki-bir-bir anlaşmanın sadece belirli bir süre için devam ettiğini öğreniyoruz. Bu zaman dilimi siparişin tarihini temel almalıdır. Şimdi OrderItem.GetPrice () öğesini InventoryItem.GetPrice olarak değiştiriyoruz (quatity, order.GetDate ())
Ancak, müşterinin sistemde ne kadar süredir bulunduğuna bağlı olarak farklı fiyatları desteklememiz gerekir: InventoryItem.GetPrice (miktar, order.GetDate (), order.GetCustomer ())
Ancak, iki-bir-bir anlaşmanın sadece aynı envanter öğesinin birden fazlasını satın almak için değil, aynı zamanda bir InventoryCategory içindeki herhangi bir öğe için birden fazla satın almak için geçerli olduğu ortaya çıkıyor. Bu noktada ellerimizi atıyoruz ve sadece InventoryItem'e sipariş öğesini veriyoruz ve ihtiyaçlarını almak için erişimciler aracılığıyla nesne referans grafiğinin üzerinden geçmesine izin veriyoruz: InventoryItem.GetPrice (this)
TL; DR Nesnelerde düşük bağlantım olmasını istiyorum, ancak iş kuralları genellikle belirli kararlar alabilmek için her yerden bilgiye erişmeye zorluyor.
Bununla başa çıkmak için iyi teknikler var mı? Diğerleri de aynı sorunu bulur mu?