2010-06-29 62 views
1

我有一個訂單對象來表示一個預期訂單/收據。這是一個實體。它有一個身份。在OOP中,應該依賴關係持有對其父項的引用嗎?

我有一個Writer對象來讀取Order對象的屬性並很好地顯示它。

對於客戶的賬單詳細信息的所有部分都有單獨的獲取者是一件麻煩事。

所以,我想讓Writer對象從Order對象中獲取客戶端的Billing Details Value Object。 (我猜客戶的賬單細節價值對象被稱爲'依賴' - 糾正我,如果我錯了)

現在,如果我這樣做,我想這個依賴關係'知道',如果原始持久數據更改

也就是說,如果從countryId「214」變爲「35」

從而使depency可以返回新countryAsPrettyString「墨西哥」,說,而不是爲「厄瓜多爾」舊值。

所以我想我會在Order Object中有一個工廠方法,並且可以將Order對象注入到Client的Billing Details Value Object的構造函數中,所以Billing Details Object總是從Order的原始持久數據屬性派生它的屬性。

是這一行動計劃你的反應:

答:啊呀這是顯而易見的,這是非常做到這一點的唯一方法

B:我的天哪!在幾個月的時間裏留出一些時間來解決一些嚴重的問題 - 你會創造一系列的關聯 - 我爲你感覺到了。

或 C:[其他]


我問COS這似乎是一個雙向聯想給我。

定單一個賬單明細對象

結算明細對象訂單

,我已經讀了雙向關聯是不好的面向對象編程慣例。

+0

Order和Billing對象之間是否存在重複的數據?如果有,他們可能會有所不同? – 2010-06-29 14:20:16

+0

我不明白你在做什麼。你想打印一份訂單。爲此,您需要打印出賬單地址,該地址存儲在BillingDetails對象中,該對象是Order對象的屬性。是對的嗎?有什麼問題?該訂單還有一個帳單地址?如果是這樣,並且您想要使用訂單的帳單地址,那麼爲什麼您會混淆BillingDetails呢? – 2010-06-29 14:46:06

+0

謝謝。是的:我需要打印帳單地址,這些地址目前作爲Order對象的單獨屬性進行存儲,並且正在考慮將它們分組到BillingDetails對象中,該對象將是Order對象的屬性。我想通過「有什麼問題」的問題 - 這是不正常的。回覆:「你爲什麼一直在討論BillingDetails」 - 我認爲它的主要原因是我將所有這些概念保留爲一個概念,所以相關的方法不會使OrderObject變得龐大。 – 2010-06-29 15:08:49

回答

0

我將建議您創建一個Address類。如果您同時需要,您的訂單對象可以有兩個屬性,BillingAddress和ShippingAddress。您有一個Writer類來爲訂單創建視圖。創建AddressWriter類以創建Address對象的視圖。然後你可以做這樣的事情:

public function printOrder($order) 
{ 
    // print order stuff here... 

    $addressWriter = new AddressWriter(); 

    echo "<h1>Billing Address</h1>"; 
    $addressWriter->printAddress($order->getBillingAddress); 

    echo "<h1>Shipping Address</h1>"; 
    $addressWriter->printAddress($order->getShippingAddress); 

    // print more order stuff ... 
} 
0

這一切開始,因爲「這是對於客戶的賬單詳細信息的所有部分都有單獨的獲取者有點麻煩。「

我不知道你的類是如何實現的,但是有可能使用PHP的__call自動構建這些getter?

如果您要設置getBilling的約定會怎麼樣?Order中的任何內容將返回$ billing-> getWhatever()並實現__call以提供此功能?

+0

它很好地反彈你們。我甚至沒有注意到,我的動機是「爲客戶的賬單細節的所有部分都有個人獲得者」。 我想我更喜歡硬編碼的鍋爐板getter和setters因爲我喜歡點擊我的開發IDE中的方法名來導航通過源代碼。像中世紀的國王一樣,「魔法迷惑我」。另外我覺得比Object-> getProperty('CountryAsPrettyName')更容易理解Object-> getCountryAsPrettyName; 但我明白你的觀點 - 這可能只是解決了我的問題。 – 2010-06-29 15:04:40

0

有子類持有引用父類緊耦合。如果必須完成,我會建議你讓父母成爲一個界面,讓孩子參考界面。或者您可以嘗試通過關聯數組或數據容器將相關信息傳遞給子類。