Перейти к содержимому
FastOffice

Что происходит от открытия до сохранения

Полный путь книги через слои и главное в устройстве: наружу уходит окно просмотра, в памяти лежат только заполненные ячейки, а правка либо проходит целиком, либо не меняет ничего.

Путь книги от файла до сохранённого файла: семь шагов, на каждом видно, кто отвечает за происходящее — ваше приложение, оболочка или ядро.

  1. Ваше приложение открывает сеанс. Оно проверяет пользователя, выбирает документ и передаёт файл, его идентификатор, режим — только просмотр или правка — и настройки интерфейса.

  2. Ядро открывает книгу. Адаптер передаёт ему содержимое файла. Ядро разбирает формат, заводит сеанс книги с нулевой ревизией и возвращает первую проекцию — то, что нужно показать.

  3. Оболочка рисует видимую часть. Ей приходит только окно, которое сейчас на экране, и сведения о нём. Большая книга не обязана целиком превращаться в разметку страницы.

  4. Пользователь выполняет операцию. Правит ячейку, сортирует, вставляет фигуру, меняет формат. Оболочка передаёт намерение и ожидаемый номер ревизии через контракт операций.

  5. Ядро проверяет и применяет. Оно сверяет права, защиту листа и не устарела ли ревизия. При успехе книга и её история меняются разом; при отказе не остаётся половины операции.

  6. Оболочка и ваше приложение получают ответ и событие. Оболочка обновляет экран, приложение может записать это в аудит или сменить статус. С каким запросом и сеансом связан ответ, видно по идентификаторам в нём.

  7. Сохранение возвращает готовый файл. Ядро собирает книгу обратно в файл. Ваше приложение принимает его содержимое, создаёт версию и доводит до конца свой процесс — согласование, подпись, проводку, что бы у вас за ним ни стояло.

Книга не превращается в экран целиком. Между файлом и тем, что видит пользователь, стоит цепочка, и каждое звено отдаёт дальше меньше данных, чем получило:

часть книги → разрежённое хранилище → окно просмотра → оболочка редактора → ваше приложение

  • Часть книги. Ядро берёт из файла тот лист и тот диапазон, которые нужны сейчас, а не всю книгу.

  • Разрежённое хранилище. Хранятся только заполненные ячейки. Лист на миллион строк, из которых заняты двести, занимает память как двести ячеек.

  • Окно просмотра. Наружу уходит прямоугольник, который сейчас на экране, и только непустые ячейки внутри него.

  • Оболочка редактора. Рисует пришедший прямоугольник и собирает намерение пользователя. Своей копии книги у неё нет: формул она не считает и файл сама не меняет.

  • Ваше приложение. Получает события и итоги операций — что изменилось, чем закончилось сохранение, — а не саму книгу. Знать внутреннее устройство файла XLSX ему не нужно.

Отсюда три следствия, о которых стоит знать заранее.

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

  • Операция либо проходит целиком, либо не меняет ничего. Успех добавляет одну запись в историю; отказ не оставляет книгу наполовину изменённой, и отмена остаётся согласованной.

  • Проверка идёт до изменения. Устаревшая ревизия, неверный запрос или запрет политики дают явный отказ, а не молчаливую порчу книги.

Ассистент документации

Ответ собран из документации и может быть неточным — сверяйтесь с источниками.