Skip to main content
Построение составных приложений WPF
Рейтинг 

Автор: Брайан Нойес (Brian Noyes)

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

Чтобы избежать этого, необходимо применять хорошие шаблоны проектирования на уровне пользовательского интерфейса, которые помогают сохранять объекты слабо связанными и тестируемыми. Руководство по составным приложениям для WPF ("Составной WPF" для краткости) — это набор библиотек, документации и демонстрационного кода из шаблонов и рекомендаций Майкрософт, помогающий создавать понятные и обслуживаемые приложения. В этой статье показывается, что предоставляет руководство по составным приложениям WPF, и как это можно использовать для построения приложений WPF.

Первый вопрос, который может возникнуть, это "Что такое составное приложение?" Простыми словами, составное приложение составлено из нескольких слабо связанных частей. WPF построен на концепции композиции. Пользовательский интерфейс составляется из отдельных элементов пользовательского интерфейса, и таким образом формируется целое, то, что пользователи видят на своих экранах как окно или страницу. Составной WPF более абстрактен и особо фокусируется на том, как можно объединять артефакты кода, содержащие определения пользовательского интерфейса и логический код, который поддерживает представление пользовательского интерфейса. Составной WPF предоставляет библиотеку составных приложений (CAL), демонстрационное приложение реализации справочника, набор приложений QuickStart и документацию по всем компонентам, предоставляемым в руководстве.

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

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

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

Составной WPF помогает добиться этих целей, предоставляя следующие функции.

  • Модульная загрузка. Можно разделить приложения на несколько слабо связанных модулей, которые динамически загружаются во время выполнения.
  • Формирование пользовательского интерфейса. Можно динамически объединять части пользовательского интерфейса из слабо связанных представлений и следовать шаблонам проектирования пользовательского интерфейса для сохранения логического кода, отделенного от определения пользовательского интерфейса.
  • Команды. Можно использовать командную инфраструктуру, которая устраняет ограничения в перенаправленных командах WPF и позволяет отделять обработчики команд от собственно пользовательского интерфейса.
  • Слабо связанные события издателей и подписчиков. Можно публиковать строго типизированные события и подписываться на них из логического кода, рассеянного по всему приложению, без каких-либо прямых ссылок между издателями и подписчиками. Кроме того, имеется возможность контроля над тем, какой поток составляют уведомления о событиях, и фильтрации уведомлений на основе содержимого полезных данных события.

Хороший способ перейти от концепций к конкретике — поработать с довольно простым составным приложением WPF. Загружаемый код для данной статьи содержит завершенное демонстрационное приложение, но в большей части этой статьи я объяснил основные части. С точки зрения сложности этот пример находится где-то между примером "Stock Trader Reference Implementation" ("Реализация справочника биржевого маклера") и приложениями QuickStart, входящими в составной WPF. Бизнес-сценарий — это приложение по управлению встречами.

Шаблоны

Материалы по темам