Можно ли использовать систему свойств WPF в серверном приложении? - PullRequest
2 голосов
/ 05 апреля 2011

У нас есть устаревший код, который состоит из бизнес-объектов с более чем сотней свойств и несколькими слоями в иерархии.Наша цель - перевести его на серверное приложение C #, которое будет вызываться с WCF.Система свойств WPF, тем не менее, кажется хорошим инструментом для использования, поскольку она более эффективна и обладает некоторыми другими дополнительными функциями, такими как наследование свойств, которые были бы полезны для нашей библиотеки.

Однако я не знаю, будет ли это возможноиспользовать его в приложении не-WPF.Может кто-нибудь сказать, будет ли это работать, и есть ли примеры проектов использования в приложениях, не относящихся к WPF?

Ответы [ 4 ]

1 голос
/ 05 апреля 2011

Поддержка DependencyProperties происходит из класса DependencyObject, который находится в WindowsBase.dll

Если у вас нет проблем с добавлением этой ссылки, нет абсолютно никаких проблем с ее использованием в решении на стороне сервера.

Однако обратите внимание, что это означает, что вы должны наследовать ваши классы от DependencyObject, что может вызвать проблему - C # не поддерживает мульти-наследование.

Реализация INotifyPropertyChanged, хотя проще и легче - не даст вам ничего, кроме Уведомления об изменениях, которое на самом деле не так уж много. Набор функций DependecyProperties намного больше (как вы упомянули). Кроме того, DependencyProperties работает НАМНОГО быстрее, если вы используете Binding, поскольку он не использует отражение (в отличие от INPC)

Я не знаю ни одного серверного решения, которое бы попробовало ваш подход, но я действительно не понимаю, почему нет, если вам действительно нужна функциональность, предоставляемая DP.

--- РЕДАКТИРОВАТЬ ---

DependecyObject наследует DispatcherObject, что делает его доступным только из потока, который его создал, и, следовательно, многопоточность этих объектов будет PAIN. если вам нужна многопоточность, то это большой запрет.

1 голос
/ 05 апреля 2011

реализуемое? Да. Практическая? Вероятно, нет.

Будучи серверным приложением, вы почти наверняка захотите получить доступ к своим бизнес-объектам из любого потока. Но объекты зависимостей имеют сходство с потоками и должны быть доступны для потока, в котором они были созданы, через их Dispatcher, если это необходимо. А если вы используете диспетчер, это означает, что вам нужно, чтобы что-то качало его события.

И это предполагает, что ваши бизнес-объекты имеют свойства , которые часто принимают значение по умолчанию . Если у вас нет «общих значений по умолчанию», алгоритмы разреженного хранения не помогут вам сэкономить память. Причина, по которой система разреженного хранения хорошо работает в WPF, заключается в том, что элементы управления имеют так много свойств, многие из которых всегда имеют одинаковые значения.

По сути, вы, вероятно, будете испытывать немалую боль и, возможно, даже не уменьшите использование памяти. Мне кажется, что вам было бы лучше обойти свои проблемы каким-либо иным способом или внедрить свой собственный механизм разреженного хранилища с бесплатными потоками, если вы подтвердите, что это фактически уменьшит использование памяти.

1 голос
/ 05 апреля 2011

WPF в значительной степени основан на DependencyProperties, но DependencyProperties не являются специфической функцией WPF, вы можете легко использовать ее сами.

То же самое можно сказать об интерфейсе INotifyPropertyChanged - его можно реализовать и использовать за пределами WPF.

0 голосов
/ 29 марта 2012

Потребуется ли много работы для эмуляции использования свойств зависимостей?

Без поддержки XAML все должно быть достаточно просто.

Однако я обнаружил, что проще сделатьиндексатор по умолчанию и используйте строку для индекса.

Вам нужно только не забыть включить [] в любой анализируемый файл.

Это более дешевая система динамических свойств, безусловно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...