SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Composite WPF with
      Prism
План


Зачем нужны модульные приложения?

Модульность с помощью Prism
Зачем нужна
     модульность?
Слабое связывание, driving app to DIP

Система плагинов

Уменьшение влияния одной части
системы на другую

Параллельная разработка

Performance / memory usage
Typical composite
   application
Starting the composite
application development
Shell
Shell

Ближайший аналог - master page в ASP.NET

UI элемент верхнего уровня (Main window)

Определяет верхний уровень структуры UI и placeholder’ы
для контента (регионы)

Не знает и не имеет прямых зависимостей от модулей

Создаётся и показывается bootstrapper’ом

Находится в исполняемой .exe сборке
Bootstrapper
Bootstrapper

Ответственный за инициализацию

Инициализирует компоненты Prism

Находится в исполняемой .exe сборке

Создаётся и запускается в OnStartUp
App.xaml.cs
Bootstrapping process

Создание и конфигурация каталога модулей

Создание и конфигурация IoC контейнера

Конфигурация регионов

Создание и инициализация Shell

Инициализация модулей
Region
Region

Placeholder для загрузки других
элементов UI в Shell

Доступны через IRegionManager

View injection

View discovery

Prism navigation API
View injection
               <ItemsControl
RegionManager.RegionName=’’ToolbarRegion’’ />




                                                             ContentView view = ...
                                                            IRegion contentRegion =
                                                     regionManager.Regions[‘‘ContentRegion’’];
                                                            contentRegion.Add(view);




                             <ItemsControl
              RegionManager.RegionName=’’ContentRegion’’ />
View discovery
               <ItemsControl
RegionManager.RegionName=’’ToolbarRegion’’ />




                                                    regionManager.RegisterViewWithRegion(‘‘Co
                                                        ntentRegion’’, typeof(ContentView));




                             <ItemsControl
              RegionManager.RegionName=’’ContentRegion’’ />
Module

Набор логически объединенных UI элементов,
сервисов, данных

Набор общих компонент

Могут разрабатываться и тестироваться независимо
друг от друга

Могут находится в разных сборках

Зависят друг от друга через абстракции
Module catalog

Объявление списка всех доступных
модулей

Порядок загрузки модулей

Зависимости между модулями

Может задаваться в коде, xaml, config
файле или загружаться из директории
Module
        interface IModule
        {
           void Initialize();
        }

Регистрация маппингов в IoC container

Начальная конфигурация
Общение между
   компонентами


Общие сервисы

Event aggregator / event bus
Event aggregator
Event aggregator


Используется для коммуникации между
слабосвязанными компонентами

Pub/sub модель

События строго типизированны
Event
  public class SymbolSelectedEvent :
  CompositePresentationEvent<string>
  {
  }

Чаще объявляется в общей сборке для
возможности кросс-модульного использования

Наследуется от CompositePresentationEvent<T>

T - тип полезной нагрузки, передаваемой
подписчикам
IEventAggregator
class SymbolsViewModel(IEventAggregator
aggregator)
{
    aggregator.GetEvent<SymbolSelectedEvent>().
    Subscribe(SymbolChanged);
}
Регистрируется в IoC контейнере на
этапе bootstrapping’а

DI через конструктор

Mais conteúdo relacionado

Semelhante a Composite WPF applications with Prism

MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?Kseniya Redunova
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOSОмские ИТ-субботники
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP Magecom Ukraine
 
Rambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRAMBLER&Co
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектахe-Legion
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Eugene Fidelin
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентовDEVTYPE
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelperDataArt
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Denis Tsvettsih
 
Adn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxAdn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxADN Digital Studio
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Eugene Fidelin
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...UA Mobile
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Kirill Rozov
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 

Semelhante a Composite WPF applications with Prism (20)

MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?
 
Views обзор
Views обзорViews обзор
Views обзор
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP
 
Rambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и Swift
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентов
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Adn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxAdn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и Redux
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 

Composite WPF applications with Prism

  • 2. План Зачем нужны модульные приложения? Модульность с помощью Prism
  • 3. Зачем нужна модульность? Слабое связывание, driving app to DIP Система плагинов Уменьшение влияния одной части системы на другую Параллельная разработка Performance / memory usage
  • 4. Typical composite application
  • 7. Shell Ближайший аналог - master page в ASP.NET UI элемент верхнего уровня (Main window) Определяет верхний уровень структуры UI и placeholder’ы для контента (регионы) Не знает и не имеет прямых зависимостей от модулей Создаётся и показывается bootstrapper’ом Находится в исполняемой .exe сборке
  • 9. Bootstrapper Ответственный за инициализацию Инициализирует компоненты Prism Находится в исполняемой .exe сборке Создаётся и запускается в OnStartUp App.xaml.cs
  • 10. Bootstrapping process Создание и конфигурация каталога модулей Создание и конфигурация IoC контейнера Конфигурация регионов Создание и инициализация Shell Инициализация модулей
  • 12. Region Placeholder для загрузки других элементов UI в Shell Доступны через IRegionManager View injection View discovery Prism navigation API
  • 13. View injection <ItemsControl RegionManager.RegionName=’’ToolbarRegion’’ /> ContentView view = ... IRegion contentRegion = regionManager.Regions[‘‘ContentRegion’’]; contentRegion.Add(view); <ItemsControl RegionManager.RegionName=’’ContentRegion’’ />
  • 14. View discovery <ItemsControl RegionManager.RegionName=’’ToolbarRegion’’ /> regionManager.RegisterViewWithRegion(‘‘Co ntentRegion’’, typeof(ContentView)); <ItemsControl RegionManager.RegionName=’’ContentRegion’’ />
  • 15. Module Набор логически объединенных UI элементов, сервисов, данных Набор общих компонент Могут разрабатываться и тестироваться независимо друг от друга Могут находится в разных сборках Зависят друг от друга через абстракции
  • 16. Module catalog Объявление списка всех доступных модулей Порядок загрузки модулей Зависимости между модулями Может задаваться в коде, xaml, config файле или загружаться из директории
  • 17. Module interface IModule { void Initialize(); } Регистрация маппингов в IoC container Начальная конфигурация
  • 18. Общение между компонентами Общие сервисы Event aggregator / event bus
  • 20. Event aggregator Используется для коммуникации между слабосвязанными компонентами Pub/sub модель События строго типизированны
  • 21. Event public class SymbolSelectedEvent : CompositePresentationEvent<string> { } Чаще объявляется в общей сборке для возможности кросс-модульного использования Наследуется от CompositePresentationEvent<T> T - тип полезной нагрузки, передаваемой подписчикам
  • 22. IEventAggregator class SymbolsViewModel(IEventAggregator aggregator) { aggregator.GetEvent<SymbolSelectedEvent>(). Subscribe(SymbolChanged); } Регистрируется в IoC контейнере на этапе bootstrapping’а DI через конструктор