2012-06-15 48 views
0

我有兩個類,ItemSoldItem。從ItemSoldItem繼承增加了一些特性,如獎金,solddate等nhibernate實例化一個從其他項繼承的項目

首先我創建了一個Item,當我把它賣了,我想創建solditem。這個設計是否正確?如果是的話我怎麼能從項目開始創造solditem?

+1

只是好奇你爲什麼不創建只有財產IsSold類項目? – ktutnik

+0

@ktutnik因爲SoldItem具有更多物品ininfluent的項目,如SoldDate,參考發票,參考售出跟蹤系統,SoldPrize不同於建議獎等 –

回答

2

我想說這是繼承的不當使用。如果您需要通過與其是否已售出的某個功能正交的Item變爲子類,那該怎麼辦?例如,如果您銷售軟件,一件物品可以通過物理媒體發貨,它可以是可下載的,也可以是訂閱;如果你決定用繼承來模擬這些,你已經有了六個類。您添加的每個正交功能都會成爲您需要的類數的乘數。

一個更好的設計,涉及構圖,將是分開的ItemSale類,以及兩者之間的聯繫;那麼你可以添加Item類的功能,以獲得相關的Sale(如果有的話)和vv。,獲得ItemSale(它應該總是非空的)。在這種情況下,思考關係而不是面向對象可能是更好的方法。

如果您只對已售出的商品感興趣,請直接點擊Sale對象,通過相關的Item獲取商品信息。如果您對任何項目感興趣,請獲取Item實例,並在需要時查詢Sale

+0

該項目只有一個,而不是一種產品,它有確定確切的一個項目的唯一代碼。這就是爲什麼最初我認爲是無知的原因。但是你是對的,最好是一對一的鏈接,否則我無法從項目導航到solditem。 –

相關問題