Архитектура: объекты и связи
Семь объектов решения, граница ответственности между ядром на Rust и поверхностью редактора и правило, по которому решается, кто владеет операцией.
Для первого понимания достаточно семи объектов. Каждый имеет одну ясную ответственность.
[Пользователь / агент] | действие v[Ваш продукт: бренд, права, карточка, процесс] | встроить, открыть, сохранить, получать события v[Поверхность] <--> [Мост к приложению и контракт сеанса] | типизированные команды v [Ядро на Rust] модель → вёрстка → сцена → запись в файл | v [Байты DOCX и хранилище]| Объект | Что делает | Владелец |
|---|---|---|
| Ваше приложение | Окно продукта, бренд, права, карточка документа и рабочий процесс. | Вы |
| Поверхность редактора (Web Surface) | Лента, страницы, ввод, выделение, диалоги и отклик на действия. | A4, настраивается под ваш бренд |
| Мост к приложению | Связывает ваше приложение и редактор; сам документ не хранит. | Общая граница |
| Сеанс документа | Жизненный цикл одного документа и его ревизии. | Контракт A4 |
| Ядро на Rust | Читает, моделирует, вычисляет, проверяет и записывает документ. | A4 |
| Хранилище | Исходный файл, версии, сроки хранения и журнал обращений. | Вы |
| Профиль возможностей | Доступные функции и ограничения конкретной поставки. | Согласуется |
Это не дублирование. Rust и Web решают разные классы задач и соединены узким контрактом.
| Ядро на Rust — процессор | Web Surface — поверхность |
|---|---|
| Владеет главной моделью документа и его ревизией. | Показывает страницы, команды, выделение и состояния. |
| Разбирает DOCX и сохраняет поддержанную структуру. | Собирается как обычное веб-приложение и работает внутри WebView. |
| Считает вёрстку, строит печатную сцену и геометрию. | Получает готовую сцену и рисует то, что разрешено контрактом. |
| Проверяет команды, защиту, устаревшую ревизию и ограничения. | Превращает жест, щелчок или ввод в типизированное намерение. |
| Выполняет тяжёлые операции — второго движка на JavaScript нет. | Управляет фокусом, языком, темой, режимом чтения и событиями для вашего приложения. |
| Возвращает результат, предупреждение или явный отказ с причиной. | Не записывает DOCX напрямую и не подменяет собой документ. |
Почему Rust
Заголовок раздела «Почему Rust»Документ — это не только видимый текст. Внутри DOCX находятся связи, стили, секции, таблицы, колонтитулы, рецензирование и объекты. Чтобы записать это без потерь, нужен один владелец смысла, строгие типы и одно и то же ядро для настольного, серверного и мобильного вариантов.
Почему Web
Заголовок раздела «Почему Web»Web-технологии позволяют встроить одну поверхность в Electron, WebView2, WKWebView, Android WebView или другой совместимый контейнер. Вам не нужно переписывать редактор под каждый набор родных элементов интерфейса, а внешний вид продукта остаётся вашим.
- Что происходит от открытия документа до сохранения — Жизненный цикл.
- Что продукт делает с документом — карта возможностей.
- Первый вызов на своей машине — Быстрый старт.