Добавить в корзинуПозвонить
Найти в Дзене

Чистая архитектура в 1С (по Роберту Мартину)

Смысл: архитектура — это способ управлять изменениями. Главный закон: зависимости направлены внутрь, к бизнес-правилам. Слои (снаружи → внутрь) Frameworks & Drivers → Interface Adapters → Use Cases → Entities 🧱 Entities (Сущности) — «о чём говорит бизнес вне компьютера» Что это: устойчивые правила и инварианты, которые директор по продажам понимает без разговоров про таблицы и формы. Это плоская структура + чистые функции модуля, который создает/валидирует/изменяет структуру и тем самым заставляет инварианты выполняться. Живут дольше UI/БД. Примеры инвариантов: 🟡 Количество ≥ 0 (целое для штучных товаров) 🟡 Сумма = Цена × Количество (округление по правилу X) 🟡 Нельзя отгрузить больше доступного остатка Не путать с use case-правилами: ❌ «Не проводить заказ при долге > кредитного лимита» ❌ «Скидка > 15% требует утверждения» В 1С размещение: Общие модули. Только чистые функции и простые типы/структуры Запрещено: обращения к формам, ролям, Запрос, ДокументОбъект. 🎛 Use Cases (Би

Смысл: архитектура — это способ управлять изменениями.

Главный закон: зависимости направлены внутрь, к бизнес-правилам.

Слои (снаружи → внутрь)

Frameworks & Drivers → Interface Adapters → Use Cases → Entities

🧱 Entities (Сущности) — «о чём говорит бизнес вне компьютера»

Что это: устойчивые правила и инварианты, которые директор по продажам понимает без разговоров про таблицы и формы. Это плоская структура + чистые функции модуля, который создает/валидирует/изменяет структуру и тем самым заставляет инварианты выполняться. Живут дольше UI/БД.

Примеры инвариантов:

🟡 Количество ≥ 0 (целое для штучных товаров)

🟡 Сумма = Цена × Количество (округление по правилу X)

🟡 Нельзя отгрузить больше доступного остатка

Не путать с use case-правилами:

❌ «Не проводить заказ при долге > кредитного лимита»

❌ «Скидка > 15% требует утверждения»

В 1С размещение: Общие модули. Только чистые функции и простые типы/структуры

Запрещено: обращения к формам, ролям, Запрос, ДокументОбъект.

🎛 Use Cases (Бизнес-логика) — «как приложение выполняет операцию»

Роль: оркестрация шагов одной операции, использование Entities и портов. Пример: Оформить заказ, Начислить бонусы

Не делает: не открывает формы, не пишет в БД напрямую, не знает про роли/сеанс.

Вход/выход: DTO — плоские Структура / ТаблицаЗначений / Соответствие

(без ссылок на формы, ДокументОбъект, регистры, метаданные).

В 1С размещение: Общие модули

Важно: use case определяет контракты портов; реализация — в адаптерах.

🔌 Interface Adapters (Адаптеры)— мосты между миром и ядром

Здесь живут:

🟡 Controller: UI/HTTP → входной DTO use case

🟡 Presenter: ответ use case → данные для формы/HTTP

🟡 Реализации портов: Запрос, работа с ДокументОбъект/регистрами, HTTP, JSON

🟡 Маппинги: DTO ↔️ платформенные типы/объекты

Чего нет: бизнес-правил и сценарной оркестрации (они в Use Cases).

В 1С размещение: Общие/прикладные модули — там, где уместно.

🖼 Frameworks & Drivers — формы, платформа, внешние системы

Роль: доставить ввод/вывод, без бизнес-логики.

Что кладём:

🟡 Обработчики команд формы, HTTP-эндпоинты, регламентные задания

🟡 Обработчики событий: ПередЗаписью, ОбработкаПроведения и тп

🟡 Сбор и первичная UI-валидация (обязательность, формат, маски)

Чего не кладём: Запросы, ДокументОбъект.Записать(), работу с регистрами

— это в Interface Adapters.

На слайдах показал сквозной пример: «Оформить заказ»

🌕 Подписывайся на сообщество 1С программистов @Желтый клуб — 1С программирование