#unit_of_work

2024-08-18

Паттерн Unit of Work в Python с SQLAlchemy

Unit of Work отслеживает все объекты, которые были загружены в память и изменены в ходе выполнения программы. Он управляет их состояниями и сохраняет изменения в базе данных в конце транзакции. Это делается с использованием сессий, которые действуют как контейнеры для всех изменений. Когда работа завершена, Unit of Work выполняет commit для всех изменений, сохраняя их в базе данных. Если что-то пошло не так, выполняется rollback, и база данных возвращается в состояние до начала транзакции. В данной статье рассмотрим, как реализовать паттерн Unit of Work с использованием SQLAlchemy.

habr.com/ru/companies/otus/art

#аналитика_данных #python #sql #Unit_of_Work #SQLAlchemy

2024-08-04

Как сменить технологию и не закопаться в рефакторинге: опыт внедрения DDD в проект на FastAPI — Часть 1

Привет, хабравчане! В серии статей расскажу, что такое DDD (domain-driven design) и какие у него преимущества и недостатки. Разберемся, когда применять подход и как сочетать его с FastAPI , популярным ASGI фреймворком на Python. В этой части рассмотрим паттерны проектирования Repository и Unit of Work . С их помощью мы работаем через интерфейсы. Паттерны помогают в разделении кода на слои: основная логика приложения представляется внутренними слоями, а используемые технологии - внешними.

habr.com/ru/articles/833720/

#fastapi #ddd #refactoring #repository_pattern #unit_of_work #проектирование #рефакторинг #чистая_архитектура

2023-12-30

Паттерн Unit of Work в разрезе чистой архитектуры DDD на языке Golang

Всем привет! Недавно мне выпала возможность разработать шаблон сервиса, который можно было бы использовать как для монолитной, так и для микро‑сервисной архитектуры. Шаблон должен был придерживаться принципов Domain‑Driven Design (DDD). В этом процессе, я столкнулся с двумя интересными проблемами: Проблема 1: Сложности обеспечения транзакционности базы данных При разработке сервисов, часто возникает неотъемлемая потребность в использовании транзакций базы данных для обеспечения целостности данных. Однако, при попытке интегрировать транзакционную логику в традиционные подходы, столкнулся с трудностями. Связывание транзакционной логики с логикой слоя базы данных оказалось нетривиальным и привело к нарушению принципов разделения ответственности. Это, в свою очередь, сказалось на тестировании и поддержке кода. Проблема 2: Нарушение изолированности слоя В попытке решить первую проблему, некоторые разработчики переносят работу с транзакциями на уровень слоя приложения, чтобы избежать прямой зависимости от базы данных. Однако, такой подход, несмотря на его обоснование, может нарушить изолированность слоев и противоречить принципам DDD и чистой архитектуры. Это, в конечном итоге, затрудняет поддержку приложения и усложняет его масштабирование. Эти две проблемы стали отправной точкой для исследования применения паттерна Unit of Work и его роли в обеспечении надежности и консистентности данных в контексте Golang и DDD. В статье я расскажу о своем подходе к решению этих задач.

habr.com/ru/articles/784186/

#ddd #unit_of_work #arhitectura #архитектура #архитектура_приложений #голанг #golang #hexagon #гексогональная_архитектура

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst