Найти в Дзене
Тактический дизайн в DDD: Мост между бизнесом и кодом
Когда мы слышим Domain Driven Design, на ум сразу приходят такие понятия, как Ubiquitous Language (Повсеместный/Всеобщий язык), Bounded Contexts (Ограниченные контексты), то есть чаще всего говорят о стратегическом дизайне. Но между стратегией и кодом лежит большой очень важный слой — тактический дизайн. Это то, как стратегические идеи воплощаются в конкретные и работоспособные программные модели. Тактический дизайн — инструмент моделирования Bounded Context. Этой части DDD незаслуженно уделяют мало внимания, хотя без тактики любая стратегия терпит поражение...
6 дней назад
Saga: когда “отмена” — это не rollback, а новое действие в домене
В мире микросервисов есть одна вечная проблема: как обеспечить согласованность данных между независимыми компонентами? Традиционные транзакции здесь не работают, но есть элегантное решение — Saga-паттерн. Разберем, откуда он произошел, что из себя представляет и почему стал стандартом индустрии. Saga — паттерн управления данными и транзакциями в распределенных системах. Вместо одной большой транзакции, когда весь процесс либо завершен, либо откатывается, данный паттерн разбивает весь процесс на несколько локальных транзакций...
1 неделю назад
🦁 Кэш: этот зверь не так прост, как кажется на первый взгляд
Кэш — механизм, который часто используют как «волшебную кнопку» для ускорения системы — достаточно добавить Redis, и всё работает быстрее. Есть обманчивое восприятие механизма кэширования — будто мы можем радикально изменить производительность системы, снизить затраты на инфраструктуру и даже повлиять на бизнес-метрики. Почти в каждом проекте наступает момент, когда кто-то говорит: «Давайте просто закэшируем». Обычно после этого система становится быстрее — и одновременно сложнее, опаснее и менее предсказуемой...
2 недели назад
В прод идут догадки разработчиков: почему наши модели врут
Всем привет! Сегодня хочу коснуться такого понятия Domain Driven Design как модель. В подходе DDD мы говорим о моделировании бизнес-процессов в коде системы. Существуют различные мнения и заблуждения на этот счет. Давайте разберемся, а что же, по своей сути, называется моделью. Модель — это ограниченное и упрощенное представление реального объекта или явления. Которое сохраняет те свойства оригинала, которые важны для исследования. Модель —это представление в воображении, в виде математических, физических, графических или символических форм...
3 недели назад
Когда сущности оживают: применение State в доменной модели DDD
Сущность в Domain Driven Design — это сердце бизнес-логики. Ее цель - моделирование бизнес-процессов и их жизненного цикла. Сущность инкапсулирует состояние и поведение важное для бизнеса. Очень часто в DDD поведение сущности, доступные операции и бизнес-правила начинают определяться через состояние самого объекта. При использовании традиционной "плоской" структуры методы изменения состояния объекта начинают содержать множество условных операторов (if-else, switch). Проверки состояния объекта дублируются в каждом методе...
1 месяц назад
Чем заменить Cursor, если нет зарубежной карты: тест 4 бесплатных альтернатив
Cursor — зверь для кодинга с агентами, но подписка кусается, а оплата из РФ иногда превращается в квест. А если хочется мощного AI-ассистента абсолютно бесплатно? Поделился личным опытом: тестил 4 альтернативы, от Yandex SourceCraft до KiloCode. Есть и топовый copilot, и агенты под pet-проекты. Какой из них уделает Cursor на бесплатных моделях? Разбираю плюсы/минусы + выводы! Первый в моем списке, стабильно рабочий вариант — ИИ ассистент для разработчика от Yandex. Работает в виде плагина для JetBrains IDE либо плагина для VS Code...
1 месяц назад
Стратегии проектирования компенсаций
Компенсации - это не просто отмена предыдущих шагов. Это новый бизнес-процесс, который требует тщательного проектирования. Перед разработчиками встают сложные вопросы: Давайте разберем ключевые стратегии проектирования компенсаций. На определенном шаге процесса произошла ошибка. Нам нужно откатить изменения, которые уже произошли, здесь у нас есть два варианта. Компенсация запускается сразу после ошибки, часто реализуется как синхронные вызовы, особенно когда в системе присутствует Оркестратор....
1 месяц назад
Приоритизация по RICE: когда хочется больше точности
В одном из прошлых постов мы говорили об ICE - простом и быстром методе приоритизации задач. Сегодня рассмотрим его «старшего брата» - методику RICE, которая дает более взвешенные оценки. RICE - это эволюция метода ICE, который был создан в компании Intercom для объективного определения, какие задачи требуют внимания в первую очередь. Основная проблема, которую решает данный метод, - учет охвата аудитории, которую затронет разрабатываемая функциональность. Плюс вместо легкости реализации (Ease) учитываются трудозатраты, необходимые для реализации...
2 месяца назад
Testcontainers + DB Rider = конец проблем с данными в интеграционных тестах
Если у тебя когда-нибудь “плавали” интеграционные тесты из-за грязной БД — ты знаешь эту боль. Testcontainers решает только половину проблемы: он поднимает чистый контейнер. Но что происходит внутри теста? Как гарантировать предсказуемые данные и стабильные проверки? Ответ — DB Rider. Testcontainers для тех, кто не знает, что это Testcontainers — библиотека для интеграционных тестов, которая позволяет поднимать контейнеры Docker с различными образами (PostgreSQL, Kafka, Redis, MiniO, любые другие контейнеры) прямо в тестах, автоматически и изолированно...
2 месяца назад
Элегантный хаос: где компенсации превращаются в проблему
В распределенных системах компенсационные транзакции — это спасательный круг для обеспечения согласованности. Но что, если этот «спасатель» сам тонет в сложности? Вместо надежности вы получаете хаос, ошибки и бессонные ночи для команды. Элегантное решение превращается в источник раздражения. Давайте разберем три главных антипаттерна, которых стоит избегать. Чрезмерно сложные компенсации Самая большая ошибка — создание чрезмерно запутанных компенсирующих действий. Иногда компенсационная транзакция по количеству шагов почти не уступает основному бизнес-процессу...
2 месяца назад
💥 Проблемы и подводные камни хореографии
Представьте танец - каждый участник знает свои шаги и реагирует на движения партнёров без указаний хореографа. Но стоит одному из танцоров сбиться или споткнуться, и весь зал погружается в несвязный хаос! 💡 Хореография в распределенных системах предлагает свободу и масштабируемость, но на практике этот подход таит в себе немало ловушек. В этом посте разберем ключевые проблемы, а также рассмотрим практики, которые не позволят скатиться в беспорядок и внедрить эффективный контроль. Хореография подразумевает асинхронное взаимодействие через события без участия центрального оркестратора...
2 месяца назад
Прокачайте тесты с Database Rider: от датасетов до версионирования данных
Если ваши интеграционные тесты тонут в хаосе тестовых данных, а ручные SQL-скрипты вызывают головную боль, то Database Rider — ваш супергерой. В прошлом посте мы разобрали основы, а сегодня нырнем в практику: от многоформатных датасетов и хитрых проверок БД до ускорения тестов и организации данных без бардака. Database Rider не ограничивается только одним форматом. Есть возможность выбрать один из поддерживаемых форматов данных: Database Rider дает возможность проверить состояние БД после выполнения теста с помощью аннотации @ExpectedDataSet...
3 месяца назад