2013-10-03 37 views
0

如果asp.net中的域對象實現INotifyPropertyChanged並觸發屬性設置器上的PropertyChanged事件,會發生什麼情況?域對象上的Asp.net INotifyPropertyChanged

我有一個Silverlight的WebForms系統的公共領域層。爲了讓silverlight獲得所有綁定魔法,該域現在執行屬性通知。

我的webforms系統似乎沒有受到影響(一切仍然有效),但我擔心幕後發生了一些我不明白的事情。

我可以製作一個Silverlight特定的領域層,它擴展了原來的領域對象,並覆蓋了屬性來做通知,但這是必要的嗎?即我是否無故添加額外的代碼層。

使用ComponentModel工具污染我的域名確實感覺很難看。

回答

1

沒有錯,很可能會發生,但它是不是最好的方法..

我能有這樣的擴展了原來的域對象,並覆蓋性能做通知silverlight的特定領域層,但這是必要的?即我是否無故添加額外的代碼層。

首先要指出的是,您的Silverlight中的UI不應綁定到域對象。事實上,你的視圖綁定到一個ViewModel,並且這個視圖模型應該包含Models。

UI模型!=域模型

污染的我與ComponentModel東西域不會覺得難看。

如果您在您的域模型中添加了表示邏輯,那麼您的業務邏輯層可能會變得一團糟,並且由於它與表示層耦合,您會失去抽象。試想一下,在2年後你轉向另一個需要模型中特殊邏輯的Web框架,你會在業務對象中添加更多的邏輯嗎?

在我看來領域模型應該與其它層隔離,不應該依賴於技術(在這種情況下,Silverlight的)

我想補充一點,將改變你的域對象Silverlight的模型創建一個新層。這可能看起來像一個開銷,但是這樣你的系統將變得乾淨並且有清晰的隔離層。

有一些工具,可以幫助你做到這一點映射,無需太多精力,例如AutoMapper

+0

感謝漂亮的答案。我的silverlight應用程序是一個mvvm項目,所以我被抽象出來(抱歉沒有完全解釋),但是我的域名目前正在使用properties通知進行處理。不知道這是否被認爲是表達邏輯,但現在你說,然後mygut的感覺是正確的。生病的分裂,吸收到自己的。無論如何,我正在使用auromapper來映射dto和域之間的關係,因此它不是一個可以實現的大項目。謝謝 – Crudler

4

如果沒有人訂閱該事件,則不會因提升而發生任何事情。

服務器端的ASP.NET應用程序不太可能訂閱這些事件,這就解釋了爲什麼沒有發生。