Архитектура: объекты и связи
Семь объектов решения, граница ответственности между Rust Core и Web Surface и правило, по которому решается, кто владеет операцией.
Для первого понимания достаточно семи объектов. Каждый имеет одну ясную ответственность.
[Пользователь / агент] | действие v[Продукт партнёра: бренд, права, карточка, процесс] | mount / open / save / events v[Web Surface] <--> [Host Bridge / Session Contract] | typed commands v [Rust Core] model -> layout -> scene -> writeback | v [DOCX bytes / storage]| Объект | Что делает | Владелец |
|---|---|---|
| Host application | Окно продукта, бренд, права, карточка и бизнес-процесс. | Партнёр |
| Web Surface | Лента, страницы, ввод, выделение, диалоги и визуальная обратная связь. | A4; настраивается |
| Host Bridge | Связывает host и редактор; не хранит документную истину. | Совместная граница |
| Document Session | Жизненный цикл одного документа и его revision. | A4 contract |
| Rust Core | Читает, моделирует, вычисляет, проверяет и записывает документ. | A4 |
| Storage | Оригинал, версии, retention и audit trail. | Партнёр |
| Capability profile | Доступные функции и ограничения конкретной поставки. | Согласуется |
Это не дублирование. Rust и Web решают разные классы задач и соединены узким контрактом.
| Rust Core — процессор | Web Surface — поверхность |
|---|---|
| Владеет канонической моделью документа и revision. | Показывает страницы, команды, выделение и состояния. |
| Разбирает DOCX/OOXML и сохраняет поддерживаемую структуру. | Собирается как browser bundle и работает внутри WebView. |
| Выполняет layout, формирует печатную сцену и геометрию. | Получает scene/projection и рисует разрешённое контрактом. |
| Проверяет команды, защиту, stale revision и ограничения. | Превращает жест, клик или ввод в типизированное намерение. |
| Выполняет тяжёлые операции без второго JS-движка истины. | Управляет focus, locale, theme, readOnly и host events. |
| Возвращает результат, warning или typed refusal. | Не записывает DOCX напрямую и не делает DOM истиной. |
Почему Rust
Заголовок раздела «Почему Rust»Документ — это не только видимый текст. Внутри DOCX находятся связи, стили, секции, таблицы, колонтитулы, рецензирование и объекты. Для безопасной записи нужен один владелец семантики, строгие типы и одинаковое ядро для desktop, service и mobile адаптеров.
Почему Web
Заголовок раздела «Почему Web»Web-технологии позволяют встроить одну поверхность в Electron, WebView2, WKWebView, Android WebView или другой совместимый контейнер. Партнёр не обязан переписывать редактор под каждый native UI toolkit и может оформить внешний продукт в своём стиле.