Александр Галкин, Литрес. Делаем модульный монолит с использованием DDD
Вставка
- Опубліковано 8 вер 2024
- В докладе разберем:
- как структурировать легаси системы с помощью стратегических (event storming) и тактических (сервис, репозиторий, доменная модель, объект-значение) паттернов DDD на конкретных примерах кода;
- как разбиение на модули и ограниченные контексты помогает не дать монолиту превратиться в big ball of mud;
- в чем разница между модульным и распределенным монолитом;
- пример реализации гексагональной архитектуры на питоне;
- как перечисленные концепции реализовать в стеке fastapi+sqlalchemy, но эти будут похожим образом выглядеть на любом другом фреймворке.
Доклад будем полезен тем, кто:
- переводит монолит на микросервисы и думает, с чего начать;
- не доволен высокой связностью сервисов, которая получилась при переходе на микросервисы, и думает, чем это лечить;
- интересуется архитектурой приложений.
Александр, спасибо за отличный архитектурный доклад, порадовали )
Отличный структурированный доклад, огонь просто ✌
Крутой доклад, крутая структуризация кода!
понимание крутости DDD приходит при написании тестов, когда начинаешь обвязывать текстами и описывать что деолжно произойти в тексте и какой результат, то там где венигрет из кучи подметодов и условий - сразу больно становится
41:50 там же перед "len(text)" стоит "if text", а значит проблемы не будет
да, это при монтаже залили более новую версию презентации, в старой версии, которая и была при демонстрации в зале, было без if text, поэтому сейчас при просмотре видео вопрос неактуален, а в слайдах на тот момент ошибка была)
@@alexgalkin9223 понял, спасибо за разъяснение)
Прикольно ведущий подсветил жесткость в коммуникации девушке, задавшей вопрос)
Почему/зачем отзывы сделаны через dataclass, а value-object-ы с валидацией обычными классами ?
Оставлю коммент с ссылками из доклада (и дополнительной инфой) для тех, кто хотел бы посмотреть что-то еще по теме
DDD
- Learning Domain Driven Design Влада Кононова www.amazon.com/Learning-Domain-Driven-Design-Vlad-Khononov-ebook/dp/B09J2CMJZY
- Продолжить можно красной книгой Вона Вернона www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon-ebook/dp/B00BCLEBN8
- И затем синей книгой Эрика Эванса www.ozon.ru/product/predmetno-orientirovannoe-proektirovanie-ddd-strukturizatsiya-slozhnyh-programmnyh-sistem-147107976
- для реализации на питоне можно посмотреть в сторону книги Cosmic Python www.ozon.ru/product/patterny-razrabotki-na-python-tdd-ddd-i-sobytiyno-orientirovannaya-arhitektura-381543119
- конференции DDD Europe ua-cam.com/channels/3PGn-hQdbtRiqxZK9XBGqQ.html
Event Storming
- книга Брандолини www.eventstorming.com/book/
- доклад по Event Storming Сергея Баранова ua-cam.com/video/NSN-NXfbEqM/v-deo.html
Архитектура
- Чистая архитектура Боба Мартина www.ozon.ru/product/chistaya-arhitektura-iskusstvo-razrabotki-programmnogo-obespecheniya-martin-robert-211433166/
- Эволюционная архитектура Нила Форда www.amazon.com/Building-Evolutionary-Architectures-Support-Constant/dp/1491986360
- Статья про то, как схожи во многом Clean, Onion, Hexagonal архитектуры herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/
- Архитектурные схемы по C4 модели - c4model.com/
Монолит/Микросервисы
- Микросервисы Криса Ричардсона www.ozon.ru/product/mikroservisy-patterny-razrabotki-i-refaktoringa-richardson-kris-211432697/
- Две книги Сэма Ньюмана (про сами микросервисы www.amazon.com/Building-Microservices-Designing-Fine-Grained-Systems/dp/1492034029 и от монолита к микросервисам www.ozon.ru/product/ot-monolita-k-mikroservisam-nyumen-s-225789150)
______
вопрос с if len(None) - это было в старой версии презентации - я проверил, это ошибка в слайдах, на проде у нас этот класс не используется. поставил себе заметку не править презентацию после финального прогона, а лучше писать тесты на слайды)
с optional str там и на слайде всё ок, если первая проверка не true, то второе выражение даже вычисляться не будет, насколько я помню. это питон так оптимизирует.
@@trueangru все верно, в той версии презентации, которая на видео сейчас, сработает short circuit evaluation, как вы и сказали. в предыдущей версии, с которой я как раз выступал, первой проверки через if не было, это потенциально if len(None), так как строка nullable. на видео это немного сбивает, да)
Спасибо за рассказ, интересно.
Можете рассказать пару слов про бизнес-кейсы, в которых требуется выполнять методы прям нескольких сервисов? Делаете ли дополнительный слой, или просто один сервис зовет остальные (как в случае с Review/Art сервисами)? Есть ли какие-то особенности при проектировании слоя сервисов в таком случае? (как избежать циклических зависимостей, например).
Спасибо
Добрый день. Возможно ли посмотреть код проекта где-то?
🤞🤞зарекалась 🐽 в 🌳🌳🌳 не ходить 🍻
огнормное спасибо))
ua-cam.com/video/AdLZMpDoxkU/v-deo.html
Женщина забавная конечно, отрасль не самая денежная, мягко говоря особенно на заре создания литреса.
Ничего удивительного в этом нет.
Видео класс. Литрес - днище и рак рунета