我剛剛經歷了一些非常相似的事情。購物車應該知道的唯一事情就是產品ID和數量。其他一切只能用於顯示目的。換句話說,產品對象總是負責價格。價格存儲在購物車中的唯一原因是幫助在視圖中顯示價格。否則我們會假設價格總是需要檢查插入或更新,以防止欺詐。
這裏是另一種情況 - 你有一個特殊的運輸,如購買價值100美元的合格貨物,你會得到免費送貨。在特定產品上可能會有單獨的運輸特別。唯一的計算方法是購買所有的購物車物品。
所以我的解決方案 - 我不確定是否最優 - 是將購物車物品傳遞給送貨對象 - 進行運費計算 - 可選地爲特定產品添加消息以顯示在購物車中 - 然後返回購物車物品。
否則,你不得不將運輸方法放在購物車類中,這是沒有任何意義的,但也許有另一種方法來做到這一點。
這裏是另一種情況 - 庫存控制。有人點了30個藍色小工具,但你只有10個藍色小工具。確定您可以在將商品插入購物車時檢查庫存。但如果他們更新購物車然後增加到30?這意味着我們必須在每次購物車更新時檢查庫存 - 購物車中的每件商品。如果我們這樣做,那麼不妨在價格上漲或下跌的情況下獲得價格。
所以我拿着購物車的物品 - 並將它們傳遞給產品對象 - 檢查庫存 - 並在必要時將物品的數量減少到當前庫存 - 可選地添加消息說明庫存有限 - 然後傳回購物車對象。
最後 - 建議您擁有擁有購物會話的對象。然後那就是總數。這樣的車從來沒有總負責 - 它只是一個容器。一種方法是您只需開始訂單,然後在那裏存儲不同的總計。