Здравствуйте, уважаемые читатели. В последнее время я как-то не следил за изменениями, которые
происходят во фреймворке для прикладных приложений на базе 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 6 – давайте посмотрим, что он нам несет. Так как я
по классике создаю приложения по 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