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

Иван Кожин «Saritasa Tools или ещё один подход ...

Avatar for DotNetRu DotNetRu
November 18, 2017

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

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

Avatar for DotNetRu

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