Статические объекты в приложении wpf - PullRequest
0 голосов
/ 11 февраля 2010

В моем приложении wpf я использую множество объектов, объявленных как статические для целей кэширования Просто интересно, есть ли какие-то недостатки.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2010

Одним недостатком является то, что статические члены в классе не имеют полной ленивой реализации. Статический конструктор будет запущен при первом обращении к любому члену этого класса. Это может или не может быть большой проблемой для вас.

Гораздо более серьезной проблемой, на мой взгляд, является то, что статика не годится для юнит-тестирования. Допустим, вы пытаетесь написать модульные тесты для другого класса, которые ссылаются на эти статические объекты. У вас нет возможности настроить макет для этих объектов. Вы вынуждены использовать реальную вещь, которая может в итоге заставить вас запустить большую часть вашей системы, и в этом случае это уже не модульный тест, а интеграционный тест.

Не думаю, что вам нужно полностью избегать ключевого слова static; просто помните об ограничениях, которые вы накладываете на свою программу. И использование Singleton - не единственная альтернатива. Вы можете просто следовать правилам "просто создать" . :)

0 голосов
/ 11 февраля 2010

Я почти никогда не использую статические данные из-за внутренних проблем, возникающих при добавлении рабочих потоков.

Если вам нужен только один экземпляр чего-то доступного для ваших объектов, то, возможно, поможет шаблон Singleton. Возможно, вы захотите прочитать эту полезную статью о Singletons в C # .

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

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