2013-02-19 58 views
1

我一直聽說你應該分開GUI/Data/Logic組件,就像MVC模式一樣。 所以,我想知道:在一個GUI應用程序中,你究竟在哪裏存儲數據?將數據存儲在GUI應用程序中的位置?

下面是一個示例(使用C#術語):
假設您有一個GUI,它接受用戶輸入,進行一些分析並在表格中顯示結果。
用戶可以在一個窗口中進行多次分析,因此底部有一個ListView,允許用戶選擇當前顯示的分析(所選項目顯示)。

爲了顯示這個,分析數據必須存儲在某個地方。
我一直做的兩兩件事之一:

  1. 把所有的數據到一個單一的對象並將其存儲在ListViewItem的「標籤」屬性
  2. 擴展「的ListViewItem」,只是增加我需要的任何屬性。

但是,這意味着我將數據存儲在ListViewItem中。 是否有更適合的地方來跟蹤數據?

我可以將它作爲私人成員添加到主窗體中,但似乎是同樣的事情。 我唯一能想到的其他事情就是製作一些我可以在需要時參考的全球課程。

謝謝。

+0

我正確地假設,你只是在談論臨時存儲 - 數據只存在於應用程序運行時,並且沒有任何持久性? – 2013-02-19 18:49:32

+0

@tereško是的,這是正確的。 – user807566 2013-02-20 03:27:44

回答

1

據我所知,你有一些ListViewItems。每個ListViewItem都與您的業務邏輯對象相關聯,並且在選擇ListViewItem之後,您需要對這個buisness對象進行一些操作。在類似的情況下,我通常使數據對象像

struct MyDataObject 
{ 
    string Id;//very often data object need to have Identifcator, but not always 
    //some fields 
} 

並添加到數據對象構造函數爲典型的用戶輸入。

之後,我使業務邏輯層包含此數據對象的可用算法。對於簡單的項目,這是像

static class MyDataObjectOperationService{ 
    void MakeSomething(MyDataObject myDataObject); 
    object GetSomething(MyDataObject myDataObject); 
    ... 
} 

對於大項目即通常interface一個靜態類。另外我通常會爲獲取這個數據對象創建一個數據層interface。例如

interface IMyDataObjectRepository{ 
    IList<MyDataObject> GetAll(); 
    MyDataObject GetById(string id); 
    //CRUD operations if it need 
} 

之後,我投入數據對象的ListViewItems IDS和ListViewItemClick得到選擇的ID,之後使用數據層類,並使用業務邏輯層類的一些操作讓數據對象的標識。如果我需要保存DataObject更改或使用數據層類創建新的DataObject I。

相關問題