SlideShare a Scribd company logo
1 of 85
Download to read offline
Saritasa Tools
Или ещё один подход к архитектуре
приложения
Иван Кожин, Очень Интересно
1
Наш зоопарк проектов
2
Случай на проекте
Заказчик: У меня при заказе товара происходит
ошибка…
3
Случай на проекте
4
Случай на проекте
Мы: Ок, а какой аккаунт вы использовали?
Заказчик: test@someproject.com
Мы: На какой странице и какой продукт вы
запрашивали?
…
5
Случай на проекте #2
6
7
Ну, извините...
Цели
● Разработать гибкую типовую архитектуру для наших
проектов.
8
Цели
● Разработать гибкую типовую архитектуру для наших
проектов.
● Заложить в архитектуру возможность журналирования
событий в проекте.
9
Цели
● Разработать гибкую типовую архитектуру для наших
проектов.
● Заложить в архитектуру возможность журналирования
событий в проекте.
● Предоставить возможность анализа состояния системы
в различное время.
10
Цели
● Разработать гибкую типовую архитектуру для наших
проектов.
● Заложить в архитектуру возможность журналирования
событий в проекте.
● Предоставить возможность анализа состояния системы
в различное время.
● Улучшить возможности интеграционного тестирования
наших проектов.
11
Паттерн «Команда»
CreateWorklog
Command
CreateWork
log()
Команда Обработчик
12
CQRS
13
Command-query responsibility segregation
CQRS
14
Проект Saritasa Tools
● Связывание команды и обработчика
● Сохранение списка команд
● Сохранение дополнительной информации
● ...
15
Saritasa Tools Messages
16
Common
Misc
Domain
Emails
EF6
EFCore1
Messages
PSGallery
Сообщения
Пользователи
Внутренние задачи
Веб-сервисы
Message
Наше
приложение
17
Типы сообщений
Сообщение
(Message)
Команда Событие Запрос
18
Сообщения
Middleware
1
Middleware
2
Ваш код
(controller action, service handler, etc)
Middleware
3
Message
Message
Message
Pipeline
19
Pipelines
20
Commands Pipeline
Queries Pipeline
Events Pipeline
Pipelines
Pipelines
● Commands Pipeline - Отвечает за изменение
состояния приложения (например, запись в
хранилище, файлы).
21
Pipelines
● Commands Pipeline - Отвечает за изменение
состояния приложения (например, запись в
хранилище, файлы).
● Query Pipeline - Используется для запросов
состояния приложения.
22
Pipelines
● Commands Pipeline - Отвечает за изменение
состояния приложения (например, запись в
хранилище, файлы).
● Query Pipeline - Используется для запросов
состояния приложения.
● Events Pipeline - События, происходящие в
командах. Могут иметь несколько
обработчиков.
23
Pipeline - создание
24
Middleware (слой)
25
Middleware - добавление
26
Middleware - добавление
27
Message Context
● идентификатор (GUID);
● сообщение (данные);
● статус;
● дата создания;
● исключение (если произошло);
● дополнительные данные (словарь);
● Сервис-провайдер (IServiceProvider);
28
Статусы сообщений
● NotInitialized;
● Processing;
● Completed;
● Failed;
● Rejected;
29
Repository Middleware
● Сообщения могут быть сохранены для:
○ ведения журнала;
○ повторного выполнения;
○ анализа;
● Можно установить фильтр.
● Поддерживаемые хранилища:
○ ADO.NET
○ файлы
○ Elasticsearch
○ Loggly
○ веб-сервис
○ JSON
○ ... 30
Формат сообщения
31
Формат сообщения
32
Формат сообщения
33
Формат сообщения
34
Формат сообщения
35
Формат сообщения
36
Формат сообщения
37
Формат сообщения
38
Repository Middleware -
Инициализация
39
ADO.NET Repository
40
Middleware Repositories -
фильтрация
41
Command (команда)
● Изменяет состояние приложения.
● Команда и обработчик — разные сущности.
● Может возвращать результат.
42
Пример команды
43
Handler (обработчик)
44
Регистрация обработчиков
45
Выполнение
46
Выполнение
Locator
Resolver
Executor
Поиск обработчика
Создание класса обработчика
Выполнение
Поиск pipeline, формирование контекста сообщения и передача первому слою.
47
Внедрение зависимостей
48
Внедрение зависимостей
● IMessagePipelineContainer - Singleton
● IMessagePipelineService - Transient (Scoped)
○ Pipeline Container
○ IServiceProvider
IMessagePipelineService
● Container
● Service Provider
49
Внедрение зависимостей
50
Внедрение зависимостей
51
Query Pipeline
1. Не изменяет состояние.
2. Рекомендуется использовать в том случае, если
необходимо журналировать аргументы метода и
результат.
52
Query Pipeline
53
Query Pipeline
54
Query Pipeline -
реализация
55
Query Pipeline -
реализация
56
Events Pipeline
CreateUserCommand
UserCreatedEvent
Отправить
e-mail
Обновить
статистику
...
57
Events Pipeline - Event Class
58
Events Pipeline - Event Handler
59
Events Pipeline - Raise Event
60
Собственный middleware
61
Производительность
1. Замена рефлексии кодогенерацией.
2. Кэширование.
62
Производительность
63
Производительность
64
Производительность
Кеширование делегатов дало увеличение производительности выполнения
команд примерно в два раза.
Было
Стало
65
Использование в
тестировании
Наше приложение
WebEndpoint
Saritasa.Tools.Console
MessagesMonitor
JSON-файл
Сеть
66
Использование в
тестировании
67
Лог сообщений
Message 1 Message 2 Message 3
~Event Sourcing
68
Структура проекта
● Domain
○ Commands
○ Entities
○ Events
○ Handlers
○ Queries
○ ...
69
А как же “легаси”?
70
“Легаси”
1. Не всё так просто, зависит от проекта.
71
“Легаси”
1. Не всё так просто, зависит от проекта.
2. Можно подключить библиотеку и использовать там, где
журналирование наиболее необходимо.
72
“Легаси”
1. Не всё так просто, зависит от проекта.
2. Можно подключить библиотеки и использовать там, где
журналирование наиболее необходимо.
3. Переделывать при рефакторинге.
73
Что получилось?
● Унифицировать архитектуру проектов.
74
Что получилось?
● Унифицировать архитектуру проектов.
● Упростить отладку при возникновении сбоев.
75
Что получилось?
● Унифицировать архитектуру проектов.
● Упростить отладку при возникновении сбоев.
● Ввести интеграционное тестирование на
основе команд.
76
Что получилось?
● Унифицировать архитектуру проектов.
● Упростить отладку при возникновении сбоев.
● Ввести интеграционное тестирование на
основе команд.
● Осуществлять простой мониторинг
приложения (больше данных о том, что
происходит внутри).
77
Над чем надо работать
● Всё ещё бета.
78
Над чем надо работать
● Всё ещё бета.
● Нет нормальных средств для сбора статистики.
79
Над чем надо работать
● Всё ещё бета.
● Нет нормальных средств для сбора статистики.
● Интерфейс пользователя для просмотра
сообщений в разработке.
80
Над чем надо работать
● Всё ещё бета.
● Нет нормальных средств для сбора статистики.
● Интерфейс пользователя для просмотра
сообщений в разработке.
● Всё ещё находятся баги.
81
Над чем надо работать
● Всё ещё бета.
● Нет нормальных средств для сбора статистики.
● Интерфейс пользователя для просмотра
сообщений в разработке.
● Всё ещё находятся баги.
● Документация :)
82
И еще один вывод
Фреймворк - это сложно
83
Кто помогал...
84
Спасибо за внимание!
● https://github.com/Saritasa/SaritasaTools
● https://saritasa-tools.readthedocs.io/en/latest/
Вопросы?
85

More Related Content

What's hot

Адаптация Jira стэка для 1с продуктов
Адаптация Jira стэка для 1с продуктовАдаптация Jira стэка для 1с продуктов
Адаптация Jira стэка для 1с продуктовAlexey Lustin
 
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Ontico
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Денис Трифонов
Денис ТрифоновДенис Трифонов
Денис ТрифоновCodeFest
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityPositive Hack Days
 
Опыт внедрения Scrum
Опыт внедрения ScrumОпыт внедрения Scrum
Опыт внедрения ScrumAlexey Krivitsky
 
Развитие навыков 1с специалиста до 5 го уровня
Развитие навыков 1с специалиста до 5 го уровняРазвитие навыков 1с специалиста до 5 го уровня
Развитие навыков 1с специалиста до 5 го уровняAlexey Lustin
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?CEE-SEC(R)
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчейVitebsk DSC
 
Применение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеПрименение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеIgor Lubenets
 
Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedAleksandr Tarasov
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikPositive Hack Days
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterPositive Hack Days
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...Mad Devs
 

What's hot (20)

Адаптация Jira стэка для 1с продуктов
Адаптация Jira стэка для 1с продуктовАдаптация Jira стэка для 1с продуктов
Адаптация Jira стэка для 1с продуктов
 
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Денис Трифонов
Денис ТрифоновДенис Трифонов
Денис Трифонов
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Опыт внедрения Scrum
Опыт внедрения ScrumОпыт внедрения Scrum
Опыт внедрения Scrum
 
Развитие навыков 1с специалиста до 5 го уровня
Развитие навыков 1с специалиста до 5 го уровняРазвитие навыков 1с специалиста до 5 го уровня
Развитие навыков 1с специалиста до 5 го уровня
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C#5 What's new?
C#5 What's new?C#5 What's new?
C#5 What's new?
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Применение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеПрименение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проекте
 
Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons Learned
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + Qlik
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
 

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

Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Ontico
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...MDDay_4
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в ЯндексеAndrey Kazarinov
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontendDenis Kolesnikov
 
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевMail.ru Group
 
Промышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыПромышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыMikhail Payson
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?Alexey Zinoviev
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest
 
Обзор NetWrix Active Directory Change Reporter
Обзор NetWrix Active Directory Change ReporterОбзор NetWrix Active Directory Change Reporter
Обзор NetWrix Active Directory Change ReporterNetwrix Россия/СНГ
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"OdessaJS Conf
 
NetWrix SQL Server Change Reporter. Обзор программы для аудита SQL Server
NetWrix SQL Server Change Reporter. Обзор программы для аудита SQL ServerNetWrix SQL Server Change Reporter. Обзор программы для аудита SQL Server
NetWrix SQL Server Change Reporter. Обзор программы для аудита SQL ServerNetwrix Россия/СНГ
 
Test Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a ProjectTest Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a ProjectKateryna Nesmyelova
 

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

Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
Sivko
SivkoSivko
Sivko
 
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
 
Промышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыПромышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. Инструменты
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
 
Обзор NetWrix Active Directory Change Reporter
Обзор NetWrix Active Directory Change ReporterОбзор NetWrix Active Directory Change Reporter
Обзор NetWrix Active Directory Change Reporter
 
Software Development
Software DevelopmentSoftware Development
Software Development
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
NetWrix SQL Server Change Reporter. Обзор программы для аудита SQL Server
NetWrix SQL Server Change Reporter. Обзор программы для аудита SQL ServerNetWrix SQL Server Change Reporter. Обзор программы для аудита SQL Server
NetWrix SQL Server Change Reporter. Обзор программы для аудита SQL Server
 
Test Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a ProjectTest Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a Project
 

More from SpbDotNet Community

Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»SpbDotNet Community
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»SpbDotNet Community
 
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»SpbDotNet Community
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...SpbDotNet Community
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»SpbDotNet Community
 
Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»SpbDotNet Community
 
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»SpbDotNet Community
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisSpbDotNet Community
 
Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»SpbDotNet Community
 
Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»SpbDotNet Community
 
Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»SpbDotNet Community
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»SpbDotNet Community
 
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»SpbDotNet Community
 
Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»SpbDotNet Community
 
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»SpbDotNet Community
 
Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»SpbDotNet Community
 
Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»SpbDotNet Community
 
Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»SpbDotNet Community
 
ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017SpbDotNet Community
 
Юрий Волков «VM via F#»
Юрий Волков «VM via F#»Юрий Волков «VM via F#»
Юрий Волков «VM via F#»SpbDotNet Community
 

More from SpbDotNet Community (20)

Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
 
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
 
Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»
 
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data Analysis
 
Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»
 
Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»
 
Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
 
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
 
Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»
 
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
 
Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»
 
Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»
 
Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»
 
ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017
 
Юрий Волков «VM via F#»
Юрий Волков «VM via F#»Юрий Волков «VM via F#»
Юрий Волков «VM via F#»
 

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