Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»

DotNetRu
November 18, 2017

Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»

Порой сложно работать с большими системами, особенно если они достались в наследство, и уж тем более если в команде много неопытных разработчиков. В таких случаях на помощь может прийти практика типовой архитектуры. Иван расскажет о подобной архитектуре и своей библиотеке «Saritasa Tools» для реализации такого рода задач.

DotNetRu

November 18, 2017
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. Случай на проекте Мы: Ок, а какой аккаунт вы использовали?

    Заказчик: [email protected] Мы: На какой странице и какой продукт вы запрашивали? … 5
  2. Цели • Разработать гибкую типовую архитектуру для наших проектов. •

    Заложить в архитектуру возможность журналирования событий в проекте. 9
  3. Цели • Разработать гибкую типовую архитектуру для наших проектов. •

    Заложить в архитектуру возможность журналирования событий в проекте. • Предоставить возможность анализа состояния системы в различное время. 10
  4. Цели • Разработать гибкую типовую архитектуру для наших проектов. •

    Заложить в архитектуру возможность журналирования событий в проекте. • Предоставить возможность анализа состояния системы в различное время. • Улучшить возможности интеграционного тестирования наших проектов. 11
  5. Проект Saritasa Tools • Связывание команды и обработчика • Сохранение

    списка команд • Сохранение дополнительной информации • ... 15
  6. Сообщения Middleware 1 Middleware 2 Ваш код (controller action, service

    handler, etc) Middleware 3 Message Message Message Pipeline 19
  7. Pipelines • Commands Pipeline - Отвечает за изменение состояния приложения

    (например, запись в хранилище, файлы). • Query Pipeline - Используется для запросов состояния приложения. 22
  8. Pipelines • Commands Pipeline - Отвечает за изменение состояния приложения

    (например, запись в хранилище, файлы). • Query Pipeline - Используется для запросов состояния приложения. • Events Pipeline - События, происходящие в командах. Могут иметь несколько обработчиков. 23
  9. Message Context • идентификатор (GUID); • сообщение (данные); • статус;

    • дата создания; • исключение (если произошло); • дополнительные данные (словарь); • Сервис-провайдер (IServiceProvider); 28
  10. Repository Middleware • Сообщения могут быть сохранены для: ◦ ведения

    журнала; ◦ повторного выполнения; ◦ анализа; • Можно установить фильтр. • Поддерживаемые хранилища: ◦ ADO.NET ◦ файлы ◦ Elasticsearch ◦ Loggly ◦ веб-сервис ◦ JSON ◦ ... 30
  11. Command (команда) • Изменяет состояние приложения. • Команда и обработчик

    — разные сущности. • Может возвращать результат. 42
  12. Выполнение Locator Resolver Executor Поиск обработчика Создание класса обработчика Выполнение

    Поиск pipeline, формирование контекста сообщения и передача первому слою. 47
  13. Внедрение зависимостей • IMessagePipelineContainer - Singleton • IMessagePipelineService - Transient

    (Scoped) ◦ Pipeline Container ◦ IServiceProvider IMessagePipelineService • Container • Service Provider 49
  14. Query Pipeline 1. Не изменяет состояние. 2. Рекомендуется использовать в

    том случае, если необходимо журналировать аргументы метода и результат. 52
  15. “Легаси” 1. Не всё так просто, зависит от проекта. 2.

    Можно подключить библиотеку и использовать там, где журналирование наиболее необходимо. 72
  16. “Легаси” 1. Не всё так просто, зависит от проекта. 2.

    Можно подключить библиотеки и использовать там, где журналирование наиболее необходимо. 3. Переделывать при рефакторинге. 73
  17. Что получилось? • Унифицировать архитектуру проектов. • Упростить отладку при

    возникновении сбоев. • Ввести интеграционное тестирование на основе команд. 76
  18. Что получилось? • Унифицировать архитектуру проектов. • Упростить отладку при

    возникновении сбоев. • Ввести интеграционное тестирование на основе команд. • Осуществлять простой мониторинг приложения (больше данных о том, что происходит внутри). 77
  19. Над чем надо работать • Всё ещё бета. • Нет

    нормальных средств для сбора статистики. 79
  20. Над чем надо работать • Всё ещё бета. • Нет

    нормальных средств для сбора статистики. • Интерфейс пользователя для просмотра сообщений в разработке. 80
  21. Над чем надо работать • Всё ещё бета. • Нет

    нормальных средств для сбора статистики. • Интерфейс пользователя для просмотра сообщений в разработке. • Всё ещё находятся баги. 81
  22. Над чем надо работать • Всё ещё бета. • Нет

    нормальных средств для сбора статистики. • Интерфейс пользователя для просмотра сообщений в разработке. • Всё ещё находятся баги. • Документация :) 82