Domain Driven Design (DDD) — это подход к проектированию программных систем, который ставит в центр предметную область и язык, на котором говорят эксперты бизнеса. Для 1С-разработчиков DDD особенно актуален, ведь платформа традиционно работает именно с бизнес-логикой, а не с низкоуровневым кодом.
В этой статье разберём:
- что такое DDD простыми словами,
- как разделить слои в 1С-конфигурации,
- примеры кода и структур,
- ошибки при внедрении,
- и главное — как это применить в проектах в России и Казахстане.
Что такое DDD и зачем он нужен в 1С
DDD (Э. Эванс, 2004) — это методология, которая помогает строить систему так, чтобы код отражал бизнес-логику. В 1С это значит: документы, справочники, регистры должны описывать предметную область, а не технические костыли.
Простое определение:
DDD = общий язык (ubiquitous language) + модель предметной области + архитектурные слои.
Почему это важно для 1С?
- Бизнес-аналитики и бухгалтеры понимают систему лучше — термины совпадают.
- Сложные процессы проще расширять — модель разбита на слои.
- Меньше ошибок при обновлении и интеграции.
Основные принципы DDD в 1С
DDD опирается на три ключевых элемента:
- Ubiquitous Language — общий язык: в коде 1С имена объектов совпадают с терминами из бизнеса.
- Bounded Context — ограниченный контекст: система разбивается на модули («Бухгалтерия», «Логистика», «CRM»).
- Слои архитектуры — разделение логики:
- слой предметной области (Domain);
- слой приложения (Application);
- слой инфраструктуры (Infrastructure).
Как применить DDD в 1С: пошагово
1. Определяем ограниченные контексты
В 1С это удобно делать через подсистемы.
Например:
- «Закупки»
- «Продажи»
- «Склад»
- «Финансы»
2. Строим слой предметной области
Создаём объекты (справочники, документы), которые отражают реальные сущности бизнеса:
- Справочник «Поставщики»
- Документ «ЗаказПоставщику»
- Регистр «ОстаткиНаСкладе»
&НаСервере
Процедура СоздатьЗаказПоставщику(Поставщик, Товары) Экспорт
НовыйЗаказ = Документы.ЗаказПоставщику.СоздатьДокумент();
НовыйЗаказ.Поставщик = Поставщик;
НовыйЗаказ.Товары.Добавить(Товары);
НовыйЗаказ.Записать();
КонецПроцедуры
3. Выделяем слой приложений
Логика, которая управляет процессом:
- обработка заказов,
- маршрутизация документов,
- проверка бизнес-правил.
Пример: автоматическая проверка кредитного лимита перед проведением документа.
4. Добавляем инфраструктурный слой
Инфраструктура отвечает за интеграции:
- обмен с Bitrix,
- загрузка XML/JSON,
- работа с внешними сервисами (банки, госуслуги).
Функция ПолучитьКурсВалюты(КодВалюты)
HTTP = Новый HTTPЗапрос("https://www.cbr-xml-daily.ru/daily_json.js");
Ответ = HTTP.Получить();
Возврат JSON.ПрочитатьJSON(Ответ.Тело);
КонецФункции
Таблица: сравнение «обычной» разработки и DDD в 1С
| Подход | Обычная разработка в 1С | DDD в 1С |
|---|---|---|
| Имена объектов | Технические | Совпадают с терминами бизнеса |
| Логика | Смешана в модулях | Разделена на слои |
| Изменения | Трудно вносить | Локализованы внутри контекста |
| Интеграции | Ад-hoc обработки | Выделенный инфраструктурный слой |
Типичные ошибки при внедрении DDD в 1С
- Игнорирование bounded context: всё в одной подсистеме «Основная».
- Смешивание слоёв: бизнес-правила в модуле формы.
- Отсутствие общего языка: объекты называются «Doc1», «Справочник2».
- Чрезмерная детализация: слишком много контекстов там, где достаточно одного.
Где применять DDD в 1С в России и Казахстане
- Интернет-ритейл — разделение контекстов «Онлайн-продажи» и «Оффлайн-склады».
- Промышленность — контексты «Закупки сырья», «Производство», «Финансы».
- Медицинский бизнес — отдельные модели для «Записи пациентов» и «Финансового учёта».
GEO-ориентир: для компаний в России и Казахстане DDD особенно полезен при интеграциях с внешними сервисами (ЭДО, налоговые API, банки).