Monday, November 2, 2015

Prism 6: what's on?

Здравствуйте, уважаемые читатели. В последнее время я как-то не следил за изменениями, которые происходят во фреймворке для прикладных приложений на базе XAML языка – Prism. Так как команда “Patterns & Practices” не делала особых усилий, чтобы внести в Prism что-то новое (вы можете это увидеть, сравнив версии 4.1 и 5), поэтому я предполагал, что Prism скоро умрет из-за того, что его никто не поддерживает. И знаете, я очень рад, что ошибался. Наверное, толчком таким изменениям действительно стало то, что Microsoft стал частью OSS комьюнити (open source software) и некоторые его продукты получили новое дыхание. Поэтому встречайте Prism 6 на рынке разработки приложений, основанных на XAM. Первое, что изменилось, – это команда, которая разрабатывает новый Prism. Список новых членов команды вы можете увидеть здесь Meet the Team. Их немного: всего три человека на данный момент. Но поскольку код сейчас доступен в открытом виде github, вы можете принять в нем непосредственное участие. Интересен тот факт, что проект будет разделен на разные части, что позволит его кастомизировать под разные платформы.
  • Prism for WPF
  • Prism for Windows 10 UWP
  • Prism.MVVM
  • PubSubEvents
  • Prism for Xamarin Forms
Этот подход команды GalaSoft, продуктом которой является самый популярный на данный момент MVVM фреймворк – MVVM Light Toolkit. Это очень и очень хорошо. Во-первых, потому что релизы для данных платформ будут выходить независимо. А во-вторых, мне очень не нравилась большая разбросанность библиотек в Prism 5. Писать независимые библиотеки  это, конечно, хорошо, но когда библиотека состоит из одного интерфейса – это уже, простите, идиотизм какой-то. Задача новой команды – как раз почистить старый код и довести его до ума. Основные цели, которые поставила перед собой команда, это:
  • Удалить зависимости с Prism.PubSubEvents от Prism.Composition
  • Удалить все устаревшие классы и свойства
  • Удалить IView интерфейс (если честно, то всегда задавался вопросом зачем его вообще используют)
  • Добавить CallermemberName атрибут к BindableBase.OnPropertyChanged
Ну и другие варианты. В общем, пока я дополз до того, чтобы посмотреть, что собой представляет новый Prism 6, как вышла уже версия 6.1.
Теперь старому Prism 5 можно сказать "до свиданья", так как его пометили в NuGet как устаревший.
Теперь настала эра Prism давайте посмотрим, что он нам несет. Так как я по классике создаю приложения по WPF, то рекомендую вам создать простое WPF приложение и назвать его, например, “PrismSixSample”, чтобы особо не морочить себе голову кодом. Затем поставим себе с помощью NuGet Prism 6, как показано на рисунке ниже.
Там внизу есть сразу ссылка на Prism 6 for WPF. Ставьте сразу себе его также.
Первое, что бросается в глаза,  так это то, что у вас стало всего 2 библиотеки , добавленных в проект (ServiceLocation все еще остался жить отдельной библиотекой).
По сравнению с Prism 5, это число составляло шесть разных библиотек.
Предлагаю начать наш обзор с библиотеки Prism.dll. Возможно, вам интересно, что же здесь изменилось.
На рисунке выше показана структура изменений и какие старые библиотеки в какие новые вошли. Начнем, для начала, с библиотеки Prism.dll.
А теперь посмотрим на то, как изменилась библиотека Prism.Wpf.dll.
А теперь остановимся на этих библиотеках более подробно. Начнем по порядку с библиотеки Prism.dll. И первым у нас идет пространство Prism, в котором перенесем всего лишь один интерфейс IActiveAware.
До этого он был в библиотеке Prism.SharedInterfaces.dll. Этот интерфейс, как и раньше, используется в классе CompositeCommand, использование которого для Prism 5 я описал в статье "Введение в Prism 5. CompositeCommand with IActiveAware".
Пространство имен Prism.Commands, по сути, у нас переехало с библиотеки Prism.Mvvm.dll. Но в нем произошли очень сильные изменения. Например, с новой версии Prism 6 убрали WeakEventHandlerManager (это был класс, который представлял собой паттерн для работы с weak событиями). Этот класс активно использовался в CompositeCommand в старой версии, сейчас же данный класс полностью переписали. Также обновилась работа с DelegateCommand. Этот класс неплохо подправили, например, добавили наконец-то нормальную работу с интерфейсом INotifyPropertyChanged.
О пространстве имен Prism.Events особо нечего рассказать. Если в целом, то сюда просто переехала библиотека Prism.PubSubEvents.dll.
В пространство имен Prism.Logging переехало часть классов библиотеки Prism.Composition.dll.
Основное отличие заключается в том, что с библиотеки Prism.Composition.dll переехала только та часть, которая не зависит от какой-либо платформы. Поэтому я и не включал эту библиотеку в свою диаграмму.
Осталось одно пространство имен, и его лучше изобразить картинкой, чтобы все стало на свои места.
Теперь настало время следующей библиотеки в Prism 6 – Prism.Wpf.dll. Рассмотрим, как одно пространство имен с Prism 5 переехало в множество пространств имен в Prism 6.
С пространства Prism.Events просто все выпилили, так как там были методы с Prism 4.1, которые в Prism 5 были помечены как Obsolete.
Пространство имен Prism.Logging упростилось.
В основном, по той причине, что часть логики переехала в Core (Prism.dll).
Библиотека Prism.Interactivity.dll из Prism 5 целиком переехала в Prism 6 без каких-либо особых изменений в Prism 6, кроме добавления нового класса DefaultWindow.
Структура пространства имен Prism.Modularity в 6-ом призме не изменилась, по сравнению с той, которая была в Microsoft.Practices.Prism.Modularity в Prism 5. Пространство Regions тоже не претерпело особых изменений. И последнее пространство имён Prism.Regions.Behaviors не изменилось, по сравнению с предыдущей версией.

Итоги
Сегодня мы рассмотрели, что же все-таки изменилось в новом Prism. Как видим, он поменялся не особо сильно. Теперь он стал как минимум компактнее, и  его можно использовать для разных платформ. В следующих статьях мы с вами попробуем использовать Prism 6 для Windows 10. А на этом буду заканчивать свой обзор об Prism 6. Надеюсь, тем, кто следит за развитием Prism и знает, как работает он изнутри, это будет интересно. 

No comments:

Post a Comment