我沒能找到關於這一主題的討論,但我認爲它很重要,那裏有它的存在,所以生病是gladful讀一個很大的機會。查看模型我們是否檢查setters中的等式,還是隻設置&always always?
在我們的屬性viewmodel setter中,我們可以檢查提供的值是否等於當前值,並且只在這種情況下通知,或者我們可以忽略該檢查並立即設置通知&。
雖然此檢查看起來令人愉快,因爲它節省了一些資源,當VM上的「刷新」不會導致View重繪時,它也可能會帶來一些不好的影響,當View稍微複雜一些,放入虛擬機或將其放入虛擬機中與將其保留在View中相比太困難了。
所以一般我與MVVM經驗時,該檢查按預期工作防止一些代碼,我能想到的情景。所以目前我認爲這個檢查是一件危險的事情,有時候通常不值得使用挽救重繪。
此外,有時候這種檢查可以用來替代更好的程序邏輯,例如在VM上有2個屬性實際上是緊密連接的,比如字符串&某個實體的對象表示。所以當你設定例如字符串,它裏面調用一個物體設定太多,如果正確驗證,而這種平等檢查從對象<的無限循環節約的情況 - >串制定者,但在這種情況下,我認爲它要好得多引進一個標誌這是在setter中檢查的,如果不需要時不調用另一個,當調用對象設置器來自調用字符串設置器時。
我認爲這個檢查主要是用於我剛纔所描述的,我認爲情況是不完全執行檢查一個很好的理由。
那麼我們應該如何編寫我們制定者?
編輯:只是爲了給出一個場景,最簡單也是最愚蠢的一個會是這樣的:如果我們有一個OneWay綁定到View從VM,並且出於某種原因,View代碼隱藏中存在一些處理器直接更改View,導致它變得與VM不同步,刷新虛擬機無法幫助。當然很明顯,在這種情況下,我們應該調用VM綁定器,但我認爲在某些情況下,解決方案變得不那麼透明時,情況可能會更加複雜和先進。所以情景是愚蠢的,但有一個檢查會阻止正確的行爲。我會想更上了一個現實世界的例子在那裏它不是那麼容易解決,但可能會需要一些時間..
您能描述檢查引入問題的情況嗎?這聽起來似乎有可能是其他奇怪的事情,因爲它是一個問題。 –
我可以閱讀這個作爲「使用檢查」的答案嗎?:)讓我想一下例子雖然.. –
不一定,但我肯定會說,如果檢查導致問題,這是一個引起關注的原因*爲了這個問題。 –