我在設計模塊時遇到困難,任何人都可以幫助我嗎?哪種設計模式以及如何使用面向對象的這種設計模式設計
由於難以維護這種模塊,我也認爲這可以測試我設計模式使用的技巧。
要求
這基本上是一個農業項目(Web應用程序)。我需要設計一個模塊進行一些計算。
有不同的作物,如玉米,西紅柿,秋葵等。這些作物都有不同的性狀。
每個性狀都有一個像200-1000這樣的整數的測量尺度。現在讓我們說我已經種植了作物,並完成了測量。現在我想做一些測量。有些測量很簡單,有些很複雜。
示例
讓我們來看一個作物玉米的例子。我記錄了15個特徵的觀察結果。 (我們將使用trait1-trait15爲例,實際名稱可以像plt_ht,YLD等)
我記錄每個性狀5點意見:
trait1 trait2 trait3 trait5 trait6..... trait15
01,02,03,04 01,02,03,04 01,02,03,04
用戶登錄到系統並且選擇他作物併爲這些觀察輸入數據。我必須計算爲每個特徵輸入的數據的平均值或總和。問題的
複雜性/中心
到目前爲止,這很簡單,但複雜性是當我有一些特徵的一些不同的公式。
例如:性狀YLD有一個公式,我必須計算它的值,這也可能取決於其他一些特徵。每種不同的作物都可以有不同的特性。
所有這些我都可以做到 - 每當用戶選擇裁剪時,我會檢查這些特定的特徵並進行計算(如果它不是特殊的特徵,那麼我根據數據庫條目對其進行平均或求和),但有很多硬編碼。 我想對處理此問題的更好方法提出建議。
我的代碼需要處理簡單和複雜的計算。 簡單的計算很容易,我已經取得了爲特徵輸入的值的平均值。 當我必須做複雜的計算時,問題出現了,因爲每個作物都有自己的公式,所以要計算我必須檢查作物,然後檢查複雜的特徵。所以我必須對複雜特徵的特徵名稱進行硬編碼。 可以告訴我如何使用Java oops [?!?]設計它,這樣我就可以使它成爲通用的?
我有大約10種不同的作物。有人算了一筆賬是針對農作物,所以會有大量的代碼,如若跌破:
hasZeroValue = (HashMap<String, ArrayList<String>>) dataValues[1];
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("TLSSG_70")) {
traitAvg=calculateTLCV(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues,50);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("TLSSG_100")) {
traitAvg=calculateTLCV(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues,50);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_60")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_90")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("YVMV_120")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_60")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_90")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("TO") && traitName.equalsIgnoreCase("ELCV_120")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_60")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_90")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg,dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("YVMV_120")) {
traitAvg=tomatoYVMVCalculation(traitName, traitAvg, dataPoint, dataTraits, hybrid, repl, traitValues, dataPvalues);
} else if(cropId.equalsIgnoreCase("OK") && traitName.equalsIgnoreCase("ELCV_60")) {
如果類每種作物被寫,把它作爲應用程序,它支持109種莊稼,現在每個用戶登錄到系統,我有鏈接,他可以做到這一點以上的鍛鍊,是否更好,作物是一個階級。每種作物都有100個性狀,這也是每個特徵。請讓我知道。
我在上面的問題結尾添加了幾點,請看看它。 – Vividata
@vividata此解決方案應涵蓋該編輯 – Pureferret