2012-08-27 59 views
2

我正在開發一個程序,用戶必須選擇四個參數才能查看相應的數據。每個參數都有一個定義的可能性列表。目前,這些參數中的每一個分別具有6,5,3,3個不同的可能輸入總數。如果你這樣做的數學意味着有270個可能的輸入組合,許多(但不是全部)將需要加載不同的圖表/圖表。它看起來很像亞馬遜newegg,因爲他們有一個treeview與各種不同的選項。不同之處在於界面本身發生了變化,而不僅僅是查詢。顯然,我不能手動創建每個組合,即使我可以在270,最終可能會添加第五個數據集。基於參數組合的動態加載

有什麼樣的設計模式可用於管理上述輸入組合?

編輯

只是爲了澄清如果我的輸入是A6B3C1D2然後我想加載特定於動態的東西。

編輯

我試圖保持它多一點的一般要避免在添加混亂,因爲他們是行業特定變量投擲。我會爲此補上四個新的。

Animals  Age Group North American Country Dataview 
Dog   All   Canada     Historical 
Cat   Teen   U.S.      Predicted 
etc 

所以,如果我選擇了在美國由所有年齡組擁有的歷史,那麼就應該拉一組圖表的狗和圖表走勢十幾歲的狗擁有,也許是因爲它的狗它可能會打破它的品種,並展示過去二十年的趨勢。

在此示例中,更改國家幾乎不會超過查詢更改,但更改Dataview或「動物」可能會加載完全不同的一組圖表/圖表。正如前面提到的,在每個查找中進行硬編碼確實是不可行的,因爲稍後需要第5列和第6列的巨大危險。他們中的一些人不會像北美國家那樣很快改變,但其他人可能會改變。

+0

你能詳細說明你的問題嗎?也許給代碼示例? – series0ne

+0

我能想到的唯一的事情是,如果您有與給定輸出相關的參數,那麼將其映射到數據結構中,類似於數據庫中的表格,您可以在其中查詢要顯示給定參數的數據作爲條款 – series0ne

+0

在同一地點我研究了工廠設計模式。你的版本比這更好,但每種關係必須有比1:1好的東西(其中很多都非常相似) 我最大的擔憂是如果我必須添加第5個輸入變量(可能)並且它總共超過1000個條目。 – Sethery

回答

1

根據你最近的編輯,我認爲這絕對是一個數據庫工作,或者失敗,一個結構或一組結構,可以使用像linq這樣的查詢。

鑑於我的最後一個答案,我認爲這看起來像場景2(其中參數完全映射到特定數據集)或場景3(其中每個參數都與一段數據有關,可以編譯一次收集的數據到期望的結果)。

在數據庫結構(如下圖所示)而言,我將如下代碼如下:

[TABLE : Parameters] 
PK : ParameterID 
    : Parameter1 
    : Parameter2 
    : Parameter3 
    : Parameter4 
    : Parameter5 
    : Parameter6 

[TABLE : Results] 
PK : ResultID 
FK : ParameterID [related to Parameters.ParameterID] 
    : ResultData 

你可以查詢此爲:

"SELECT ResultData FROM Results WHERE ParameterID = (SELECT ParameterID FROM Parameters WHERE Parameter1 = "" AND Parameter2 = ""); 

通過這種方式,你可以映射的任意組合參數到一個獨特的結果

你甚至可以以另一種方式做到這一點:

[TABLE : Results] 
PK : ResultID 
    : ParameterHash 
    : ResultData [possibility that this relates to other tables holding your results] 

你可能這個查詢的方式略有不同:

"SELECT ResultData from Results WHERE ParameterHash = '" + ComputeParameterHash(P1, P2, P3, P4, P5, P6); + "'"; 

使用的數據結構,比如這將不影響其他參數在將來添加。給定我的第二個表格示例,它使用散列來解析結果的參數,可以將任意數量的參數添加到散列計算器,爲每個數據集合生成一個唯一的散列值。 (小心碰撞)。第一個例子需要更多的工作,因爲當你添加更多的參數時,你將不可避免地向表中添加更多的列。這不應該影響現有的記錄,但需要更多的工作。

如果您的結果數據分散在多個表中,您可以考慮使用視圖來連接來自不同表的數據以提供期望的結果。例如:您的參數在視圖中選擇數據,然後從創建視圖的基礎表中提取數據,因此您不必關心在多個表的代碼級將數據連接在一起。你的數據庫可以爲你做到這一點。在使用設計模式方面,舉個例子來說,實體框架可能有助於維護關係數據(在數據庫中)和麪向對象數據(在你的代碼中)之間的關係。

道歉,如果這不是你想要的,那就是我現在所能想到的。考慮這個基於數據庫結構的抽象設計,但可以修改爲與其他數據結構一起工作。

+0

這可以工作。我會試驗它。 – Sethery

1

由於對實際問題的瞭解並不多,所以在這種情況下很難提出明確的答案,而且我不確定任何設計模式是否會給出所需的結果,但是要闡明一些理論上的細節可能的解決方案:

場景1 - 算法計算給定參數值的結果,如數學公式。即:

(A6 + B3 + C1 + D2 = "Result 23")  
(A1 + B2 + C3 + D4 = "Result 119") 

方案2 - 的參數形成絕對結果。您可以考慮使用散列表或其他類似的數據結構,其中您的參數與所需結果進行散列映射。即

(A6 + B3 + C1 = d0c423a2 = "Result 1") 
(A2 + B5 + C4 = f6d33e56 = "Result 2") 
(A3 + B4 + C1 = a34e6bbc = "Result 3") 

方案3 - 單獨的參數返回部分結果,其共同返回所需的結果集。你可以再次使用一個哈希表。 I.E.

(A1 = cd3de456 = "Partial Result 1") 
(A3 = d4e5ca23 = "Partial Result 2") 
(B3 = b567d342 = "Partial Result 4") 
(C1 = a34e6bbc = "Partial Result 66") 
(D2 = f6d33e56 = "Partial Result 123") 

因此(A1 + B3 + C1 + D2 = "Partial Result 1", "Partial Result 4", "Partial Result 66", "Partial Result 123")

如果正確編碼,任何一種理論上可以工作,並借給自己加入額外的未來參數。

+0

這是在正確的區域。我會稍微解釋一下上面的內容,看看你的想法。 – Sethery