3. Зачем нужна
модульность?
Слабое связывание, driving app to DIP
Система плагинов
Уменьшение влияния одной части
системы на другую
Параллельная разработка
Performance / memory usage
7. Shell
Ближайший аналог - master page в ASP.NET
UI элемент верхнего уровня (Main window)
Определяет верхний уровень структуры UI и placeholder’ы
для контента (регионы)
Не знает и не имеет прямых зависимостей от модулей
Создаётся и показывается bootstrapper’ом
Находится в исполняемой .exe сборке
10. Bootstrapping process
Создание и конфигурация каталога модулей
Создание и конфигурация IoC контейнера
Конфигурация регионов
Создание и инициализация Shell
Инициализация модулей
15. Module
Набор логически объединенных UI элементов,
сервисов, данных
Набор общих компонент
Могут разрабатываться и тестироваться независимо
друг от друга
Могут находится в разных сборках
Зависят друг от друга через абстракции
16. Module catalog
Объявление списка всех доступных
модулей
Порядок загрузки модулей
Зависимости между модулями
Может задаваться в коде, xaml, config
файле или загружаться из директории
17. Module
interface IModule
{
void Initialize();
}
Регистрация маппингов в IoC container
Начальная конфигурация
18. Общение между
компонентами
Общие сервисы
Event aggregator / event bus
21. Event
public class SymbolSelectedEvent :
CompositePresentationEvent<string>
{
}
Чаще объявляется в общей сборке для
возможности кросс-модульного использования
Наследуется от CompositePresentationEvent<T>
T - тип полезной нагрузки, передаваемой
подписчикам