SlideShare a Scribd company logo
Как жить в согласии с SOLID?
Евгений Тюменцев
HWdTech, LLC
hwdtech.ru
11-я конференция .NET разработчиков
31 октября 2015
dotnetconf.ru
2
Особенности разработки ПО
Фредерик Брукс
«Мифический человеко-месяц»
3
Программист VS каменщик
4
Почему так получается у
программистов?
5
• Сроки нарушаются
• ?
• ?
6
• Сроки нарушаются
• Требуется все больше разработчиков
• ?
7
• Сроки нарушаются
• Требуется все больше разработчиков
• Быстрее переписать, чем продолжать
8
Логика Хоара
1969 г. An Axiomatic Basis for
Computer Programming
1971 г. Procedures and Parameters:
An Axiomatic Approach
1980 г. премия Тьюринга
1990 г. Медаль “Пионер
компьютерной техники”
2000 г. рыцарский титул за заслуги
в области образования и
компьютерной техники, премия
Киото
Чарльз Хоар
9
Факты о логике Хоара
Система аксиом, содержащая if и while
полна
При добавлении новой конструкции в язык,
существующие аксиомы для goto делают
логику противоречивой.
10
Факты о логике Хоара
Если использовать
1. статическое связывание
2. Рекурсию
3. Вложенные процедуры
4. Процедуры, принимающие в качестве
параметров процедуры.
5. Глобальные переменные
то не существует полной системы аксиом.
11
Логика Хоара часто противоречива
⊢ 𝐿 𝞿 и ⊢ 𝐿 `𝞿
Значит, что любое изменение в коде надо
тестировать!
12
Противоречивость: сильно страшно?
13
Противоречивость: сильно страшно?
14
Противоречивость: сильно страшно?
15
Противоречивость: сильно страшно?
16
Что делать?
Итерации, velocity
Низкая степень связности
Небольшая вложенность процедур
Модульное тестирование
Рефакторинг
Planning poker
Agile
Хорошо определенные требования
17
Что делать?
SOLID
Доказаны математически (2014 год)
Верны не только для ООП, но и для
функционального, и процедурного
программирования!
18
Активная
разработка
Схема разработки
Ядро
Кандидаты
в ядро
Направление миграции кода
19
switch
enum
Приведение типов
new
20
Процессоры уже не те!
21
Многопоточность?
Это Вам не это!
22
Базы данных
• Скорость выполнения запросов
• Миграция
• Репликация
• Непротиворечивость
• ORM
23
Один формат для всех данных
{
‘фамилия’: ‘Иванов’,
‘заказы’: [
{
‘дата’: ’01.09.2015’,
‘стоимость’: 2000
},
{
‘дата’: ’01.10.2015’,
‘стоимость’: 2000
}
]
}
24
Интерфейс работы с данными
interface IObject
{
object getValue(string name);
void setValue(string name, object val);
}
class Field<T>
{
public Field(string name) {…}
public abstract T this[IObject o]
{
get;
set;
}
}
Генерация строго типизированных
оберток для IObject по интерфейсам
interface MyObj
{
int A
{
get;
}
string B
{
get;
set;
}
}
Унификация обработчиков
26
Акторы – альтернатива многопоточности
Carl Hewitt,
Peter Bishop,
Richard Steiger
A Universal Modular ACTOR
Formalism for Artificial Intelligence
1973
27
Что такое актор?
Актор – вычислительная
сущность, которая может
за один шаг
• Отправить конечное число
сообщений другим акторам
• Создать конечное число
акторов
• Выбрать поведение для
приема следующего
сообщения
28
Многопоточность vs Акторы
29
Почему своя реализация акторов, а не, например,
Erlang, Scala и т.д.?
http://benchmarksgame.alioth.debian.org
30
Архитектура
31
Маршруты сообщений
32
Управление маршрутами без программиста
33
Контрольные точки
Контрольная точка сохраняет в БД
входящее сообщение как есть
Конечная точка маршрута сообщения
34
Преимущества контрольных точек
Контрольная точка сохраняет в БД входящее
сообщение как есть
входящий
запрос
ответ
35
Библиотека акторов
 Публикация
 Загрузка по требованию
36
Библиотека конфигураций
{
‘actors’: [{
‘name’: ‘emailSender’,
‘smtp’: …,
},
{
‘name’: ‘dailyReport’,
…
}
‘messagePaths’: [{
‘name’: ‘newAd’,
…
}],
‘enpoints’: […]
}
37
Преимущества библиотеки
конфигураций
• Быстро клонировать
• Автоматический деплой
• Можно выставлять время
обновления
• Автоматический откат
• Ни одна конфигурация не теряется
• Можно иметь одновременно
сервера, которые работают с
разными версиями данных
{
‘actors’: [{
‘name’: ‘emailSender’,
‘smtp’: …,
},
{
‘name’: ‘dailyReport’,
…
}
‘messagePaths’: [{
‘name’: ‘newAd’,
…
}],
‘enpoints’: […]
}
38
Методы обнаружения разладки
Карты Шухарта
Все процессы подвержены вариабельности.
Управляемое явление - используя прошлый опыт
можно предсказать, каких его вариаций можно
ожидать в будущем.
ГОСТ Р 50779.42-99 (ISO 8258-91)
выявление точек выхода
процесса из стабильного
состояния для установления
причин появившегося
отклонения и их устранения.
39
Как узнать, что изменения дали
положительный эффект
40
Все ли пользователи
одинаково полезны
41
Если коллеги не идут на
сотрудничество
42
Активность пользователей можно
создавать
43
Преимущества решения
• Масштабируемые приложения могут строить
разработчики с небольшим опытом работы или вообще
без опыта
44
Преимущества решения
• Масштабируемые приложения могут строить
разработчики с небольшим опытом работы или вообще
без опыта
• Нет проблем с миграциями данных
45
Преимущества решения
• Масштабируемые приложения могут строить
разработчики с небольшим опытом работы или вообще
без опыта
• Нет проблем с миграциями данных
• Методы объективного контроля работоспособности всей
системы, не зависящие от программистов и
тестировщиков
46
Преимущества решения
• Масштабируемые приложения могут строить
разработчики с небольшим опытом работы или вообще
без опыта
• Нет проблем с миграциями данных
• Методы объективного контроля работоспособности всей
системы, не зависящие от программистов и
тестировщиков
• Быстрое клонирование и развертывание серверов по
необходимости
47
Преимущества решения
• Масштабируемые приложения могут строить
разработчики с небольшим опытом работы или вообще
без опыта
• Нет проблем с миграциями данных
• Методы объективного контроля работоспособности всей
системы, не зависящие от программистов и
тестировщиков
• Быстрое клонирование и развертывание серверов по
необходимости
• Возможность адаптации или правки автоматизируемых
бизнес-процессов без участия программистов.
48
Существующие внедрения – портал
бесплатных объявлений и новостей
• Команда – 5 студентов без опыта
работы и филолог
49
Существующие внедрения – портал
бесплатных объявлений и новостей
• Команда – 5 студентов без опыта
работы и филолог
• Среднее время открытия страницы
уменьшено с 4,5 с до 400 мс
50
Существующие внедрения – портал
бесплатных объявлений и новостей
• Команда – 5 студентов без опыта
работы и филолог
• Среднее время открытия страницы
уменьшено с 4,5 с до 400 мс
• Количество ошибок по сравнению с
предыдущей версией уменьшилось в
1000 раз!
51
Существующие внедрения – портал
бесплатных объявлений и новостей
• Команда – 5 студентов без опыта
работы и филолог
• Среднее время открытия страницы
уменьшено с 4,5 с до 400 мс
• Количество ошибок по сравнению с
предыдущей версией уменьшилось в
1000 раз!
• Количество серверов уменьшено с
15 до 3!
52
Существующие внедрения – портал
бесплатных объявлений и новостей
• Команда – 5 студентов без опыта
работы и филолог
• Среднее время открытия страницы
уменьшено с 4,5 с до 400 мс
• Количество ошибок по сравнению с
предыдущей версией уменьшилось в
1000 раз!
• Количество серверов уменьшено с
15 до 3!
• Объявление можно подавать
простым текстом вместо длинной
формы: “Двушка в Советском округе,
проспект Мира, 64, в районе ост.
Политех, 50/34/8, 3/5п, не требует
ремонта, санузел раздельный, хрущевка.”
53
Существующие внедрения – платформа
для контекстной рекламы
• Требование – время отклика строго меньше 100 мс
• Попытки задействовать ElasticSearch, MongoDb и т.д. дают
в некоторых случаях 200 мс и больше
•
54
Существующие внедрения – платформа
для контекстной рекламы
• Требование – время отклика строго меньше 100 мс
• Попытки задействовать ElasticSearch, MongoDb и т.д. дают
в некоторых случаях 200 мс и больше
• Был написан актор, который хранит все критерии
рекламных компаний сразу в памяти.
55
Существующие внедрения – платформа
для контекстной рекламы
• Требование – время отклика строго меньше 100 мс
• Попытки задействовать ElasticSearch, MongoDb и т.д. дают
в некоторых случаях 200 мс и больше
• Был написан актор, который хранит все критерии
рекламных компаний сразу в памяти.
• Получили время отклика 7-46 мс (сам поиск по структуре
в памяти < 1 мс)
• Для масштабирования система поддерживает работу с
несколькими экземплярами серверов
56
Существующие внедрения –
кроссплатформенное приложение
• Приложение считает время по
каждой задаче программиста,
снимает скриншоты, мониторит
активность клавиатуры и мыши
• Интерфейс написан на HTML5 и CSS3
• Бизнес-логика написана на нашей
библиотеке
• Приложение работает без
изменений под Mac, Window, Linux
(кроме методов снятия скриншота и
логирования активности – это малая часть
– до 40 ч работы – по сравнению со всем
приложением)
57
Спасибо за внимание
Евгений Тюменцев
HWdTech, LLC
etyumentcev@hwdtech.ru
twitter.com/etyumentcev

More Related Content

PDF
Кроссплатформенная библиотека для Android и iOS: за и против
DotNetConf
 
POTX
Разработка надежных параллельных, распределенных приложений: быстро и дешево
DotNetConf
 
PDF
Continuous integration
Grigoriy Ostrovskiy
 
PDF
Continuous Delivery для ASP.NET MVC проекта под Linux
DotNetConf
 
PDF
Микросервисы: взгляд сверху и в бок
DotNetConf
 
PPTX
Самодиагностика сервисов на базе платформы .NET
Andrew Gubskiy
 
PPTX
Александр Белоцерковский
CodeFest
 
PPTX
Вячеслав Смирнов - Инструменты нагрузочного тестирования
Elias Fofanov
 
Кроссплатформенная библиотека для Android и iOS: за и против
DotNetConf
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
DotNetConf
 
Continuous integration
Grigoriy Ostrovskiy
 
Continuous Delivery для ASP.NET MVC проекта под Linux
DotNetConf
 
Микросервисы: взгляд сверху и в бок
DotNetConf
 
Самодиагностика сервисов на базе платформы .NET
Andrew Gubskiy
 
Александр Белоцерковский
CodeFest
 
Вячеслав Смирнов - Инструменты нагрузочного тестирования
Elias Fofanov
 

What's hot (20)

PDF
Игорь Кашкута
CodeFest
 
PPTX
C#5 What's new?
Oleg Kulygin
 
PDF
Илья Ефимов «IoC/DI на примере Autofac»
Yulia Tsisyk
 
PPTX
матлогика для программистов
etyumentcev
 
PPTX
Coding like a sex
Max Arshinov
 
PPTX
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Elias Fofanov
 
PPTX
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
Ontico
 
PDF
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Ontico
 
PDF
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
it-people
 
PPTX
Платформа SmartActors
etyumentcev
 
PDF
Олег Савкин
CodeFest
 
PDF
Денис Трифонов
CodeFest
 
PPTX
C++ Core Guidelines
Sergey Zubkov
 
PPTX
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
 
PDF
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
Ontico
 
PDF
Python Development process in Yandex
aviatakz
 
PDF
Олег Бартунов и Иван Панченко
CodeFest
 
PDF
Применение CQRS и EventSourcing в DDD-проекте
Igor Lubenets
 
PDF
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
PDF
Robot Framework: универсальный инструмент автоматизатора
SQALab
 
Игорь Кашкута
CodeFest
 
C#5 What's new?
Oleg Kulygin
 
Илья Ефимов «IoC/DI на примере Autofac»
Yulia Tsisyk
 
матлогика для программистов
etyumentcev
 
Coding like a sex
Max Arshinov
 
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Elias Fofanov
 
Как мы данные готовили ORM и все-все-все в приложении Почта Mail.Ru / Кирилл ...
Ontico
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Ontico
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
it-people
 
Платформа SmartActors
etyumentcev
 
Олег Савкин
CodeFest
 
Денис Трифонов
CodeFest
 
C++ Core Guidelines
Sergey Zubkov
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Platonov Sergey
 
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
Ontico
 
Python Development process in Yandex
aviatakz
 
Олег Бартунов и Иван Панченко
CodeFest
 
Применение CQRS и EventSourcing в DDD-проекте
Igor Lubenets
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Robot Framework: универсальный инструмент автоматизатора
SQALab
 
Ad

Similar to Как жить в согласии с SOLID? (20)

PDF
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
HappyDev
 
PDF
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON
 
POTX
Как жить в согласии с SOLID?
etyumentcev
 
PPTX
Как 7 студентов и филолог делали сложный проект
etyumentcev
 
PPTX
Как 7 студентов и филолог делали сложный проект
Eugeniy Tyumentcev
 
PDF
Учебный день конференции HighLoad++ 2013
Ontico
 
PPTX
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Vadim Martynov
 
PPTX
Учебный день конференции HighLoad++ 2013
Ontico
 
PPTX
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
Валерий Павлович Сысик
 
PPTX
презентация рамдок
RAMEC
 
PDF
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite
 
PPTX
Организация эффективной работы команды при разработке и поддержке сложной инф...
tabtabus
 
PPTX
разработка бизнес приложений (9)
Alexander Gornik
 
PDF
Алексей Романчук «Реактивное программирование»
DevDay
 
PPTX
Денис Бесков. Как обеспечивать полноту требований
Denis Beskov
 
PDF
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
PPTX
Как выбрать для проекта практики проектирования и работы с требованиями
SQALab
 
PDF
Как выбрать для проекта практики проектирования и работы с требованиями
CUSTIS
 
PDF
Choose method for requirements Tsepkov Analyst Days-2017
Maxim Tsepkov
 
PPTX
Разработка корпоративных (бизнес) приложений (лекция 1)
Alexander Gornik
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
HappyDev
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON
 
Как жить в согласии с SOLID?
etyumentcev
 
Как 7 студентов и филолог делали сложный проект
etyumentcev
 
Как 7 студентов и филолог делали сложный проект
Eugeniy Tyumentcev
 
Учебный день конференции HighLoad++ 2013
Ontico
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Vadim Martynov
 
Учебный день конференции HighLoad++ 2013
Ontico
 
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
Валерий Павлович Сысик
 
презентация рамдок
RAMEC
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite
 
Организация эффективной работы команды при разработке и поддержке сложной инф...
tabtabus
 
разработка бизнес приложений (9)
Alexander Gornik
 
Алексей Романчук «Реактивное программирование»
DevDay
 
Денис Бесков. Как обеспечивать полноту требований
Denis Beskov
 
Cеминар в Виннице (22.03.2014)
Alexander Babich
 
Как выбрать для проекта практики проектирования и работы с требованиями
SQALab
 
Как выбрать для проекта практики проектирования и работы с требованиями
CUSTIS
 
Choose method for requirements Tsepkov Analyst Days-2017
Maxim Tsepkov
 
Разработка корпоративных (бизнес) приложений (лекция 1)
Alexander Gornik
 
Ad

More from DotNetConf (16)

PDF
Как грабить корованы
DotNetConf
 
PDF
Как анимировать тысячи объектов на карте и не подвесить браузер
DotNetConf
 
PDF
Как приручить реактивное программирование
DotNetConf
 
PDF
Делаем очередь поверх Кассандры
DotNetConf
 
PDF
К искусству записи пользовательских историй
DotNetConf
 
PDF
Как это будет: ASP.NET Core
DotNetConf
 
PDF
Быстрый бэкенд с parse.com
DotNetConf
 
PDF
Kotlin в production. Как и зачем?
DotNetConf
 
PDF
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
PDF
Платформа Apache Hadoop
DotNetConf
 
PDF
Робототехника для прикладных программистов
DotNetConf
 
PDF
Разработка Windows 8 приложений глазами WPF/Silverlight программиста
DotNetConf
 
PDF
Inversion of Control в .NET
DotNetConf
 
PDF
Введение в реактивный .NET
DotNetConf
 
PDF
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
DotNetConf
 
PPTX
Машинное обучение на платформе .NET
DotNetConf
 
Как грабить корованы
DotNetConf
 
Как анимировать тысячи объектов на карте и не подвесить браузер
DotNetConf
 
Как приручить реактивное программирование
DotNetConf
 
Делаем очередь поверх Кассандры
DotNetConf
 
К искусству записи пользовательских историй
DotNetConf
 
Как это будет: ASP.NET Core
DotNetConf
 
Быстрый бэкенд с parse.com
DotNetConf
 
Kotlin в production. Как и зачем?
DotNetConf
 
Многопоточное программирование на C#, путевые заметки
DotNetConf
 
Платформа Apache Hadoop
DotNetConf
 
Робототехника для прикладных программистов
DotNetConf
 
Разработка Windows 8 приложений глазами WPF/Silverlight программиста
DotNetConf
 
Inversion of Control в .NET
DotNetConf
 
Введение в реактивный .NET
DotNetConf
 
Особенности передачи и обработки видео данных. Приправа из кодеков или с чем ...
DotNetConf
 
Машинное обучение на платформе .NET
DotNetConf
 

Как жить в согласии с SOLID?