2011-04-05 28 views
2

我們有遺留的代碼,它由具有超過一百個屬性和層次結構中的幾個圖層的業務對象組成。 我們的目標是將其轉換成一個將與WCF一起調用的C#服務器應用程序。然而,WPF財產系統似乎是一個很好的工具,因爲它更高效,還有一些額外的特性,如財產繼承,這對我們的圖書館很有用。是否可以在服務器應用程序中利用WPF屬性系統?

但是,我不知道在非WPF應用程序中使用它是否可行。是否有人能告訴我們它是否可以工作,以及是否有在非WPF應用程序中使用的示例項目?

+2

你說的是DependencyProperties? – SLaks 2011-04-05 15:22:57

回答

1

WPF很大程度上基於DependencyProperties,但DependencyProperties不是WPF特有的功能,您可以輕鬆地自行使用它。

您可以對INotifyPropertyChanged接口進行相同的說明 - 它可以在WPF之外實現和使用。

1

DependencyProperties支持來自類DependencyObject的,如果你有任何問題補充說,參考它坐落在WindowsBase.dll

,但絕對在服務器端解決方案,使用該沒問題。

但應注意,這意味着您必須從DependencyObject繼承您的類,這可能會導致問題 - C#不支持多繼承。

實現INotifyPropertyChanged,雖然更容易,更輕 - 除了變更通知以外,不會給你任何其他的東西,但這並不是真的。 DependecyProperties的功能集更大(就像你提到的那樣)。另外,如果你使用綁定,DependencyProperties的工作速度會更快,因爲它不使用反射(雖然INPC是這樣做的)

我不知道任何服務器端解決方案嘗試了你的方法,但我真的可以'如果你確實需要DPs公開的功能,那麼爲什麼不呢?

---編輯---

DependecyObject繼承DispatcherObject的,這使得它只能在創建它,因此多線程這些對象將是一個痛苦的線程訪問。如果你需要多線程,那麼這是一個很大的不走。

1

可行嗎?是。實際的?可能不會。

作爲服務器應用程序,您幾乎肯定會想要從任何線程訪問您的業務對象。但是,依賴項對象具有線程關聯性,並且必須由創建它們的線程通過其分派器訪問(如有必要)。如果你使用調度程序,那意味着你需要抽取事件。

並且這假定您的業務對象具有屬性,這些屬性通常具有默認值。如果您沒有「通用默認值」,則稀疏存儲算法無法幫助您節省內存。稀疏存儲系統在WPF中運行良好的原因是控件具有許多屬性,其中許多屬性始終具有相同的值。

實際上,您可能會遇到相當多的痛苦,甚至可能不會減少內存使用量。在我看來,如果您驗證它實際上會減少內存使用量,那麼最好是以其他方式解決問題,或者實現自己的免費線程稀疏存儲機制。

+0

+1沒有想到這一點。 – 2011-04-05 17:30:52

0

模擬使用依賴項屬性需要做很多工作嗎?

不需要支持XAML,它應該很容易。

但是,我發現製作默認索引器並使用索引字符串更容易。

你只需要記住在任何解析的文件中包含[]。

這是一個更便宜的動態屬性系統肯定。

相關問題