SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
Практика применения подходов и
в проектах
Руслан Гатиятов Дроид Лабс
- Явность
- Поддерживаемость
- Расширяемость
- Безопасность
- Стабильность
- Предсказуемость
- Масштабируемость
- Тестируемость
Требования к коду
от к
Основные проблемы
- сильная связанность кода
- неявность кода
- сложно тестировать медленные тесты
-
- хуки в коде
- кто должен быть тоньше
Первый опыт
- проект
- Entity
- Value Object
- Aggregate
- Service
- Repository
- Factory
- Domain events
Проблемы
как формировать слои
- так ли вы поняли что такое
а вы случаем не перепутали и
как часто вы общаетесь с экспертами
- можете ли вы абстрагироваться от предыдущего опыта и
забыть все его практики
- все больше недоступны
- о базе данных нужно думать в последнюю очередь
- сообщество против вас
Первые попытки:
- неправильное разделение приложения на модули (по
таблицам БД)
- слой сериализации данных
- отказ от использования callbacks в моделях
- отказ от использования валидаций
- добавление репозитариев-оберток над ActiveRecord
Этапы эволюции
- стало больше неправильных классов, связанность кода меньше
- отсутствует application layer
- неправильные bounded contexts
- отсутствие
- сложно читаемый код! не ruby-way!
obj = A::B::C::D.new
obj.perform_operation
- тестировать все также сложно (попытка инъекций через конструктор)
def users_repository
Repositories::Users.new
end
- models и repositories не разделены
Первые результаты
- полный отказ от ActiveRecord, переход на datamapper (Sequel)
- четкое выделение application, domain, infrastructure слоев
- ubiquitous language
- отказ от любых общих названий Services, Base*, *Manager
- правильное выделение bounded contexts
- внедрение dependency injection
- быстрые, понятные, поддерживамые тесты (TDD стандарт)
- база - данных деталь реализации
- строгий режим работы с АПИ (application layer стал понятным)
- осознание, что write model != read model. Смотрим в сторону CQRS.
- отказ от devise и прочих стандартных гемов
- и наконец-то! rails - деталь реализации
Переосмысление
Внедрение
Формы запросов
ActiveRecord:
Model
DDD:
CommandHandler
EntityFactory
Validators
Repository
DAO
DataMapper
Entity
- каждый модуль помещается - это отдельный gem
- легко переиспользовать
- просто тестировать
- несколько комманд работают одновременно
для тестов
- строгий код (код подскажет, когда вы ошибаетесь)
- не тестируйте стек фреймворка (он уже протестирован)
- активно используйте DI в тестах
- применяйте SOLID принципы
- выделяйте из приложения микросервисы (SOA)
- оборачивайте все внешние гемы в DI классы
- DI классы stateless
- читайте форумы java и .Net
Еще практики
- умение общаться с доменным экспертом
- понимание и применение ООП
- активное применение TDD
- практика применения принципов SOLID
Порог вхождения, чтобы начать нормально работать:
Для junior-разработчика 2-3 месяца
Для middle-разработчика 2-3 недели
Требования к команде
Спасибо за внимание

Contenu connexe

Plus de HappyDev

2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложенийHappyDev
 
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложенийHappyDev
 
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBenchHappyDev
 
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестированииHappyDev
 
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...HappyDev
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...HappyDev
 
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...HappyDev
 
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерахHappyDev
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...HappyDev
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...HappyDev
 
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...HappyDev
 
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхроннымHappyDev
 
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...HappyDev
 
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых системHappyDev
 
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...HappyDev
 
2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджинг2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджингHappyDev
 
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователяHappyDev
 
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...HappyDev
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...HappyDev
 

Plus de HappyDev (20)

2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
2015-12-06 Евгений Тюменцев - Практики разработки серверных приложений
 
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
2015-12-06 Александр Чернышев - Технологии открытости мобильных приложений
 
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
 
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
2015-12-05 Александр Шиповалов - Веселые картинки в тестировании
 
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
2015-12-05 Александр Бындю, Андрей Шапиро - Пять самых важных составляющих пр...
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
 
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
2015-12-06 Юрий Мельничек - Руководство для разработчиков по маркетингу мобил...
 
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
2015-12-06 Сергей Хрущев - Человеческим языком о суперкомпьютерах
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
 
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
2015-12-06 Артем Зиненко - Что делать, если браузеры клиентов действуют проти...
 
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
2015-12-06 Антон Тарасенко - Ваш следующий сервис будет асинхронным
 
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
2015-12-06 Андрей Коновалов - От сервисной компании к продуктовой: что нужно,...
 
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
2015-12-05 Вадим Литвинов - Проблемы разработки распределённых систем
 
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
2015-12-05 Максим Дорофеев - Сила первого шага или сессия групповой депрокрас...
 
2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджинг2015-12-05 Александр Рожнов - Свое облако под стейджинг
2015-12-05 Александр Рожнов - Свое облако под стейджинг
 
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
2015-12-05 Анатолий Орлов - Скорость с доставкой до пользователя
 
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
2015-12-05 Максим Дорофеев - Студенческий синдром: почему мы все делаем в пос...
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
2015-12-05 Дмитрий Еманов - Многоверсионная архитектура данных: аспирин или г...
 

2015-12-05 Руслан Гатиятов - Практика применения подходов DDD и CQRS в Ruby-проектах

  • 1. Практика применения подходов и в проектах Руслан Гатиятов Дроид Лабс
  • 2. - Явность - Поддерживаемость - Расширяемость - Безопасность - Стабильность - Предсказуемость - Масштабируемость - Тестируемость Требования к коду
  • 3. от к Основные проблемы - сильная связанность кода - неявность кода - сложно тестировать медленные тесты - - хуки в коде - кто должен быть тоньше Первый опыт - проект
  • 4.
  • 5.
  • 6. - Entity - Value Object - Aggregate - Service - Repository - Factory - Domain events
  • 7. Проблемы как формировать слои - так ли вы поняли что такое а вы случаем не перепутали и как часто вы общаетесь с экспертами - можете ли вы абстрагироваться от предыдущего опыта и забыть все его практики - все больше недоступны - о базе данных нужно думать в последнюю очередь - сообщество против вас
  • 8. Первые попытки: - неправильное разделение приложения на модули (по таблицам БД) - слой сериализации данных - отказ от использования callbacks в моделях - отказ от использования валидаций - добавление репозитариев-оберток над ActiveRecord Этапы эволюции
  • 9. - стало больше неправильных классов, связанность кода меньше - отсутствует application layer - неправильные bounded contexts - отсутствие - сложно читаемый код! не ruby-way! obj = A::B::C::D.new obj.perform_operation - тестировать все также сложно (попытка инъекций через конструктор) def users_repository Repositories::Users.new end - models и repositories не разделены Первые результаты
  • 10. - полный отказ от ActiveRecord, переход на datamapper (Sequel) - четкое выделение application, domain, infrastructure слоев - ubiquitous language - отказ от любых общих названий Services, Base*, *Manager - правильное выделение bounded contexts - внедрение dependency injection - быстрые, понятные, поддерживамые тесты (TDD стандарт) - база - данных деталь реализации - строгий режим работы с АПИ (application layer стал понятным) - осознание, что write model != read model. Смотрим в сторону CQRS. - отказ от devise и прочих стандартных гемов - и наконец-то! rails - деталь реализации Переосмысление
  • 14.
  • 15. - каждый модуль помещается - это отдельный gem - легко переиспользовать - просто тестировать - несколько комманд работают одновременно
  • 17. - строгий код (код подскажет, когда вы ошибаетесь) - не тестируйте стек фреймворка (он уже протестирован) - активно используйте DI в тестах - применяйте SOLID принципы - выделяйте из приложения микросервисы (SOA) - оборачивайте все внешние гемы в DI классы - DI классы stateless - читайте форумы java и .Net Еще практики
  • 18. - умение общаться с доменным экспертом - понимание и применение ООП - активное применение TDD - практика применения принципов SOLID Порог вхождения, чтобы начать нормально работать: Для junior-разработчика 2-3 месяца Для middle-разработчика 2-3 недели Требования к команде