我想要一個保存按鈕,只有在視圖isdirty時才啓用。我應該如何處理這個問題?如何使用Model-View-Presenter模式實現IsDirty的UI?
我的特殊情況是使用.Net 2.0的WinForms應用程序。我有一個主講人呼叫的服務層。服務層返回一個屏幕綁定的DTO。
將視圖綁定到此DTO並讓DTO實現isDirty屬性可以嗎?或者我應該將DTO中的數據卸載到專門用於演示目的的另一個對象中,例如視圖模型?
我想要一個保存按鈕,只有在視圖isdirty時才啓用。我應該如何處理這個問題?如何使用Model-View-Presenter模式實現IsDirty的UI?
我的特殊情況是使用.Net 2.0的WinForms應用程序。我有一個主講人呼叫的服務層。服務層返回一個屏幕綁定的DTO。
將視圖綁定到此DTO並讓DTO實現isDirty屬性可以嗎?或者我應該將DTO中的數據卸載到專門用於演示目的的另一個對象中,例如視圖模型?
視圖不應該很髒。只有你的模型。
然後你可以簡單地有一個事件,當你的模型變髒時觸發,當它變得乾淨時觸發一個事件。
這是我最初的想法。該模型是什麼會變得骯髒,並認爲可以反映這一事實。所以我會假設模型必須實現一個isdirty屬性。 – David 2009-12-30 21:09:40
那麼你可以讓你的所有控件都在自動調用_presenter.MarkDirty()或類似的方法時啓用更改。
或者你可以允許使用保存按鈕,但是如果對象是乾淨的,然後用沒有更改的對話框或類似的響應進行響應。
自動加載返回可能不是WinForms中最正確的詞,但它應該至少表達我的觀點。 – 2009-12-30 22:31:50
我同意@Pace只有模型應該髒。
我只是想在這裏添加(因爲這似乎是.net),您可以使用CSLA來實現您的模型,並且您可以免費獲得IsDirty funcionality(以及許多其他的東西)。
更新:
是里昂證券不看好的業務層?
的確的,但我認爲IsDirty方法屬於業務層。你說的是在你的DTO上實現一個IsDirty,但是當你這麼做的時候,這個對象不再是一個DTO(因爲它不僅僅是傳輸數據)。
此外,您可以使用CSLA作爲您的DTO和表示層之間的中間層,但如果您的意圖只是使用IsDirty功能,則這會有點太多開銷。重點是:當你開始在你的DTO中加入'功能'的時候,我不明白你爲什麼不公開你的業務層中的CSLA對象而不是簡單的DTO。
這是我做的,視圖本身可以跟蹤用戶是否試圖修改數據。發生這種情況時,可以通知演示者視圖數據已更改,演示者可以對此事件進行操作以啓用/禁用保存按鈕。這是迄今爲止我發現的最簡單的解決方案,否則您必須對DTO/Data對象本身進行更改跟蹤。
「MVP」非常廣泛...什麼平臺/語言/體系結構? – 2009-12-30 20:32:31
@Marc希望這提供了更多的細節,讓你給予一些迴應 – David 2009-12-30 21:13:25