Архитектура: четыре слоя и объекты
Одна система из четырёх слоёв ответственности, точное место Rust, перечень объектов и главные связи между ними.
| Слой | Владелец | Ответственность | Не должен делать |
|---|---|---|---|
| Host / DMS | Партнёр | Пользователь, права, карточка, версии, аудит, бизнес-процесс. | Не обязан понимать внутреннее устройство XLSX. |
| Web Shell | F1 + бренд партнёра | Показывает редактор, собирает намерение пользователя, отображает ответ. | Не рассчитывает формулы и не меняет файл самостоятельно. |
| Compute Contract | Совместная интеграционная граница | Описывает команды, результаты, ошибки, ревизии и возможности. | Не зависит от конкретного WASM/native транспорта. |
| Rust Core | F1 | Единый смысловой владелец книги: расчёт, изменения, история, сохранение. | Не управляет карточкой документа и пользователями партнёра. |
Где именно находится Rust
Заголовок раздела «Где именно находится Rust»Rust Core — не сервер и не экран. Это переносимый вычислительный модуль. В браузере тот же код собирается в WebAssembly. В desktop или серверной среде он запускается как native binary/process. Способ запуска меняется, семантика рабочей книги и compute contract остаются общими.
| Web TypeScript/Lit: интерфейс и оркестрация | Contract JSON-команды и типизированные ответы | Rust единая модель и операции книги |
|---|
| Архитектурное правило В Web не должно появляться второе «маленькое ядро». Если кнопка меняет смысл документа, операция должна пройти через contract и Rust. Иначе браузерная и серверная версии начнут вести себя по-разному. |
|---|
2 · ОБЪЕКТНАЯ МОДЕЛЬ
Какие объекты существуют и как они связаны
Заголовок раздела «Какие объекты существуют и как они связаны»| Объект | Содержит / знает | Жизненный цикл |
|---|---|---|
| IntegrationSession | Идентификатор документа, контекст прав, конфигурацию продукта. | Создаётся системой партнёра на открытие редактора. |
| WorkbookSession | Открытую книгу, текущую revision, history, backend и состояние сохранения. | Живёт от open до close; изолирован от других книг. |
| Workbook | Листы, имена, стили, настройки, связи и package parts. | Загружается из файла и изменяется только ядром. |
| Sheet | Ячейки, строки/колонки, таблицы, объекты и параметры печати. | Имеет стабильную identity внутри книги. |
| Viewport | Только видимую проекцию листа и нужные метаданные. | Меняется при scroll/zoom; не равен всей книге. |
| Operation / Intent | Действие, параметры, expectedRevision, ограничения. | Один запрос через compute contract. |
| Result / Event | Новый state, delta, warning/refusal и данные для отображения. | Возвращается Web и Host после операции. |
| SavedArtifact | Байты файла, формат и сведения о сохранении. | Передаётся DMS для новой версии. |
Главные связи
Заголовок раздела «Главные связи»| IntegrationSession | создаёт и ограничивает | WorkbookSession |
|---|
| WorkbookSession | владеет состоянием | Workbook + Revision + History |
|---|
| Workbook | публикует только нужное | Viewport |
|---|
| Operation | проверяет revision и меняет | WorkbookSession |
|---|
| Save | создаёт | SavedArtifact → DMS version |
|---|
| Почему это важно Партнёр интегрируется не с «экраном Excel», а с понятным набором объектов. Экран можно заменить или адаптировать; WorkbookSession, Operation, Revision и SavedArtifact остаются стабильной основой. |
|---|
3 · ЖИЗНЕННЫЙ ЦИКЛ