DCI (Data-Context-Interaction) — это архитектурный паттерн, который разделяет систему на три основные части:
- Data (Данные): Объекты, представляющие доменные сущности (например,
User, Account). Они содержат состояние, но не знают о бизнес-логике.
- Context (Контекст): Собирает необходимые данные и связывает их с ролями в конкретной транзакции. Контекст знает, какие объекты играют какие роли.
- Interaction (Взаимодействие): Роли, которые определяют бизнес-логику, выполняемую над данными в контексте. Конкретные действия, которые могут быть выполнены над данными в определенной ситуации.
DCI фокусируется на том, как реальные люди мыслят о взаимодействии объектов в определенном сценарии, а не только на структурной организации данных. Он призван сделать бизнес-логику более явной и легко читаемой.
Пример: Перевод денег между счетами.
- Data:
Account (состояние: баланс)
- Context: "Перевод денег", который связывает два объекта
Account с ролями "Источник" и "Получатель".
- Interaction: Роли "Источник" (метод
withdraw) и "Получатель" (метод deposit). Бизнес-логика: проверка наличия средств, изменение балансов.
Основные преимущества DCI:
- Улучшенная читаемость кода: Бизнес-логика становится более выраженной и легко отслеживаемой.
- Лучшее понимание домена: Паттерн отражает реальные взаимодействия между объектами.
- Повышенная гибкость: Новые взаимодействия могут быть добавлены без изменения существующих объектов данных.
- Уменьшение сложности: Фокусируется на коротких, изолированных транзакциях.
DCI может быть реализован с разными языками программирования, хотя некоторые языки лучше подходят для его поддержки (например, Scala с trait'ами).