2012-02-04 30 views
0

我有一個複雜的供應鏈優化模型。問題實例成爲一個對象,它包含屬性和對象列表(例如),其中包含屬性和對象列表等等。這是數據。如何將不同的功能從同一個類中分離出來?

基於對象中的數據,我開發了一個優化算法。所以這些類包含了該算法所需的所有函數和屬性。

現在,我想建立一個基於相同數據的模擬程序。我創建的對象模型也適用於此。但是,優化例程和仿真例程之間沒有交互。

當我繼續時,我覺得我應該以某種方式分開這兩個功能,但這很難,因爲它們基於相同的問題實例。我想分開,因爲隨着每個班級的例程數量的增加,很難跟蹤到底是什麼。目前,我開始使用Sim進行仿真的功能名稱。是否有任何優雅的選項來分離這兩個功能?

+0

這是整個問題嗎? – ilivewithian 2012-02-04 10:29:30

+0

你嘗試過嗎? – annonymously 2012-02-04 10:29:53

+0

對不起,在我沒有完成時偶然發貼。 – willem 2012-02-04 10:30:37

回答

0

我不確定我完全理解你的問題,或者我明白你想達到什麼目的,但如果我明白了;難道你不能只做兩個類,或包含不同方法的接口嗎?考慮到你已經在Sim的前面添加了方法,我認爲這會很好。因此,不要說SimMethod,而要說Sim.Method

1

將您的優化和模擬邏輯與數據類別分開。

數據類應包含數據值和子對象的屬性,並封裝足夠的邏輯以維護數據的完整性。數據類中的屬性和方法應該允許對數據進行相當簡單和細緻的更改,而他們實現的唯一邏輯就是防止數據進入「不可能」狀態。因此,例如,他們實施驗證,或更新其他包含依賴數據的對象。這裏沒有複雜的優化邏輯。

優化和仿真邏輯進入單獨的類,它們對數據類進行操作。這些類包含運行優化/模擬的複雜邏輯。這些類中的代碼處於更高層次 - 專注於優化/模擬問題,而不是保持數據完整性。

假設您有Product對象,其中包含RawMaterial對象。這些是你的數據類。 Product.AvailableDate財產計算爲產品所含原材料的最大值RawMaterial.AvailableDate。您希望通過以最佳方式分配有限的一組原材料來獲得產品的最早可用日期。在這種情況下,數據類作業(即ProductRawMaterial類作業)執行「如果產品的原材料被修改,重新計算和更新Product.AvailableDate屬性」的邏輯。決定如何分配原材料到產品是優化者的工作。

最後,你說你想從模擬邏輯中分離優化邏輯 - 所以只要確保在單獨的類(或類集)中實現它們。

相關問題