SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
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 через конструктор

Weitere ähnliche Inhalte

Ähnlich wie Composite WPF applications with Prism

Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP
Magecom Ukraine
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Глеб Тарасов
 
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
GetDev.NET
 

Ähnlich wie 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...
 

Kürzlich hochgeladen

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 

Kürzlich hochgeladen (9)

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 

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 через конструктор