2010-01-14 103 views
1

嘿偷看:-)(...對不起,這是一個有點長)C#的WinForms,MVP架構

我使用C#的WinForms和MVP模式開發一個應用程序, 它只是一個相對簡單的應用程序 - 雖然它做了相當多的東西,所以我認爲MVP模式對組織代碼有很大的幫助。

在WinForm啓動之前,我已經在Program類中創建了要使用的模型實例 - 一個STATIC實例。 (模型類不是靜態類的頭腦)

然後,我創建主窗體(視圖),它創建一個對其Presenter的引用。 (View/Presenter類都是非靜態的)。

我在靜態實例背後的推理是讓整個應用程序訪問相同的模型信息。然後,當應用程序關閉時,我可以從Program類訪問最新的模型數據並保存任何需要保留的內容。這是很好的,因爲它可以將所有加載/保存在一個地方。

在任何情況下,每個模型類只有一個實例,沒有數據庫連接,你有什麼。

從我所知道的只有一件事情需要在任何時候訪問任何模型。

我確實有'BackgroundWorker'線程做各種事情 - 但我沒有引用那些線程中的任何模型。我將模型中的數據值傳遞給線程。線程然後返回信息,如果需要,通過主線程傳播到相關的模型。

我只是想創建模型實例作爲靜態是一個更合適的方法,然後永遠地繞過引用...(你知道的,通過一個裁判的主要形式,然後將其傳遞到另一種形式等等等等)

這樣的觀點裏面的代碼看起來就像:

// this = ref to the view

PresenterA p = new PresenterA(this, Program.ModelA); ...

(顯然,類名不只是PresenterA,MODELA等,這將是相當愚蠢的)

現在的我,我很確定有人會吼我,告訴我這是一種可怕的做事方式。

如果是這樣,那麼反對這個問題的人是否可以現在或永遠說出你的和平。

TIA

(順便說一句,我只是一個菜鳥,我不開發C#爲生,這是一個愛好的東西)

:-)

回答

2

看到Implementing MVC with Windows Forms爲許多指針到你給出的選項

還要考慮使用Dependency injection避免你靜態類

+0

感謝您的鏈接,我會通過他們拖網。 我以前見過一些網站。 順便說一句,我沒有靜態類,我有一個靜態實例給一個類 - 但依賴注入看起來很有趣,所以會研究它... 謝謝:) – JustAPleb 2010-01-14 10:49:58