Что происходит от открытия до сохранения
Полный путь книги через слои и главное в устройстве: наружу уходит окно просмотра, в памяти лежат только заполненные ячейки, а правка либо проходит целиком, либо не меняет ничего.
Путь книги от файла до сохранённого файла: семь шагов, на каждом видно, кто отвечает за происходящее — ваше приложение, оболочка или ядро.
-
Ваше приложение открывает сеанс. Оно проверяет пользователя, выбирает документ и передаёт файл, его идентификатор, режим — только просмотр или правка — и настройки интерфейса.
-
Ядро открывает книгу. Адаптер передаёт ему содержимое файла. Ядро разбирает формат, заводит сеанс книги с нулевой ревизией и возвращает первую проекцию — то, что нужно показать.
-
Оболочка рисует видимую часть. Ей приходит только окно, которое сейчас на экране, и сведения о нём. Большая книга не обязана целиком превращаться в разметку страницы.
-
Пользователь выполняет операцию. Правит ячейку, сортирует, вставляет фигуру, меняет формат. Оболочка передаёт намерение и ожидаемый номер ревизии через контракт операций.
-
Ядро проверяет и применяет. Оно сверяет права, защиту листа и не устарела ли ревизия. При успехе книга и её история меняются разом; при отказе не остаётся половины операции.
-
Оболочка и ваше приложение получают ответ и событие. Оболочка обновляет экран, приложение может записать это в аудит или сменить статус. С каким запросом и сеансом связан ответ, видно по идентификаторам в нём.
-
Сохранение возвращает готовый файл. Ядро собирает книгу обратно в файл. Ваше приложение принимает его содержимое, создаёт версию и доводит до конца свой процесс — согласование, подпись, проводку, что бы у вас за ним ни стояло.
Ключевая модель исполнения
Заголовок раздела «Ключевая модель исполнения»Книга не превращается в экран целиком. Между файлом и тем, что видит пользователь, стоит цепочка, и каждое звено отдаёт дальше меньше данных, чем получило:
часть книги → разрежённое хранилище → окно просмотра → оболочка редактора → ваше приложение
-
Часть книги. Ядро берёт из файла тот лист и тот диапазон, которые нужны сейчас, а не всю книгу.
-
Разрежённое хранилище. Хранятся только заполненные ячейки. Лист на миллион строк, из которых заняты двести, занимает память как двести ячеек.
-
Окно просмотра. Наружу уходит прямоугольник, который сейчас на экране, и только непустые ячейки внутри него.
-
Оболочка редактора. Рисует пришедший прямоугольник и собирает намерение пользователя. Своей копии книги у неё нет: формул она не считает и файл сама не меняет.
-
Ваше приложение. Получает события и итоги операций — что изменилось, чем закончилось сохранение, — а не саму книгу. Знать внутреннее устройство файла XLSX ему не нужно.
Отсюда три следствия, о которых стоит знать заранее.
-
Размер книги не упирается в браузер. Большой файл открывается потому, что в модель страницы попадает окно, а не документ.
-
Операция либо проходит целиком, либо не меняет ничего. Успех добавляет одну запись в историю; отказ не оставляет книгу наполовину изменённой, и отмена остаётся согласованной.
-
Проверка идёт до изменения. Устаревшая ревизия, неверный запрос или запрет политики дают явный отказ, а не молчаливую порчу книги.
- Как выглядит разговор с ядром — Как устроен сеанс API.
- Что умеет ядро рядом с Excel — карта возможностей.