---
trigger: glob
glob: *.cpp,*.hpp
---
Мы следуем принципам чистой архитектуры. На примере контракта Capital: 
- app/ - уровень приложения. Содержит действия, которые вызываются контрактом, которые оркестрируют бизнес-логику сущностей и ядра. Подпапки содержат домены бизнес-логики, где каждый файл - одно действие. 
- domain/ - доменный уровень. Содержит сущности и корневую бизнес-логику, которая в своих функциях использует несколько сущностей. На уровне сущностей запрещено вызывать другие сущности. 
  - entity/ - слой сущностей домена. Содержит выделенные сущности, структуры, индексы их таблиц, и inline реализации простейших бизнес-функций, которые по своим названиям помогают явно определить что происходит с сущностью. 
  - core/ - слой корневой бизнес-логики, которая объединяет несколько сущностей. Если бизнес-функция сущности требует для своего исполнения нескольких операций с сущностями или она явно относится к доменному уровню приложения за счет своего применения, то такая функция должна быть вынесена в ядро. 

Мы допускаем последовательное-повторное обновление сущностей по ходу исполнения действия контракта, если это необходимо в пользу ясности. Длинна типа name не должна превышать 12 символов и не должна содержать специальных знаков.
