簡體   English   中英

模型視圖演示者被動視圖實現

[英]Model View Presenter Passive View implementation

我目前正在使用C#在.NET Compact Framework項目上使用Model View Presenter被動視圖。 現在,在我的模型中,我從C / C ++ DLL中獲得了許多Pinvoke。 我的項目是硬件測試設備,通常帶有按鈕和大型LCD觸摸屏。 然后收集數據(使用一些數據庫)並傳輸到PC。

我創建了一個模型接口,實現該模型的類調用了這些Pinvoke方法。 原因之一是我想將Pinvoke和編組,互操作封裝在模型中。

現在我有一個主持人。 一個示例場景:用戶按下一個按鈕,然后視圖上的click事件將(通過接口)調用presenter上的方法,然后最終(再次通過接口)調用模型的方法。

現在,在我看來,演示者幾乎正在成為模型業務邏輯的包裝。 如果我向模型添加一些方法,則還需要通過接口添加該方法,因為視圖的按鈕需要調用模型中的某些方法。 我覺得有太多的間接。 一個示例是,在模型中,我有一個線程來等待C / C ++ DLL推送的事件。 現在,我在Presenter上有一個線程,該線程使用觀察者模式對來自模型的事件進行排隊和處理(更改屏幕視圖並告訴用戶正在發生的事情)。

視圖界面中的偽代碼:void viewChangeTestResultsText(string Text);

from the interface of presenter:
void PerformTest();

on the concrete class the implements the interface of presenter:
void PerformTest()
{
interfaceView.viewChangeTestResultsText("Test Started");
interceModel.PerformTest();
}

on the interface of Model:
void PerformTest();

on the concrete class of the Model:
PerformTest()
{
ModelPinvokeMethods.PerformTest();
}

在此代碼中,按鈕單擊處理程序在presenter中調用performtest,然后presenter在模型中調用performtest。 然后模型調用pinvoke performtest。 間接操作已經造成了一定的痛苦,因為我要實現很多方法調用,並且該項目的期限很緊。

對於我的項目,還有另一個變體,我知道我將需要一個可更改的演示者,與此同時,我還需要一個可更改的模型,因為盡管有很多相似之處,但是業務邏輯還是有所不同。 現在,我正在考慮將模型中的所有邏輯推給演示者,這樣我將只維護演示者視圖上的邏輯並將模型僅用於數據處理(數據庫,配置,設置),我認為在開發和代碼維護方面將更加簡單,但是我不確定靈活性方面的影響。

這是我第一次在被動視圖中使用MVP。 我不確定我是否缺少有關正確實施MVP的內容。 有什么想法或建議嗎?

您對MVP的理解似乎不錯; 您已經正確區分了表示邏輯(執行測試,同步視圖)和域邏輯(PInvoke)。 使用已設置的接口,您可以輕松地對演示者進行單元測試(這是使用MVP的主要優勢之一)。

我建議不要將所有邏輯放到演示者中,因為這可能導致出現“ 上帝對象”

關於您的演示者問題,我不確定您的意思。 您是說每種設備都需要不同的演示者/模型嗎? 如果是這樣,那么如果每種類型的設備彼此之間有足夠的區別,那么為它們配備一個MVP三元組似乎是完全合理的。 如果確定它們之間的共同特征,則可以使用繼承或實用程序類來提供共同的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM