Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite купить дешевый 
компьютер родом из Dhgate.com

Lines Club

Ищем достойных соперников.

Библиотека сайта или "Мой Linux Documentation Project"

Электронные таблицы SocialCalc

Глава 19 из книги "Архитектура приложений с открытым исходным кодом", том 1.

Оригинал: SocialCalc, глава из книги "The Architecture of Open Source Applications" том 1.
Автор: Audrey Tang, перевод: Н.Ромоданов

19.2. SocialCalc

Рис.19.5. Интерфейс SocialCalc

На рис.19.5 и рис.19.6 показаны интерфейс и классы SocialCalc, соответственно. В сравнении с WikiCalc, роль сервера была значительно сокращена. Его единственной обязанностью осталось отвечать на запросы HTTP GET и обслуживать все электронные таблицы, сериализуя их в формате save, позволяющим их сохранять; как только браузер получал данные, все расчеты, отслеживание изменений и взаимодействия пользователем теперь осуществлялись на языке Javascript.

Рис.19.6: Диаграмма классов SocialCalc

Компоненты Javascript были разработаны в стиле послойной модели MVC (Model/View/Controller — Модель/Внешний вид/Контроллер), причем задача каждого класса фокусировалась на одном аспекте:

  • Класс Sheet является моделью данных, представляющих структуру электронной таблицы, размещенную в памяти. В ней хранится словарь из координат для объектов Cell (Ячейка),Он содержит словарь из координат сотовых объектов, каждый из которых представляет одну ячейку. В пустых ячейках нет записей и, поэтому, для них вообще память не тратится.
  • Класс Cell представляет собой содержимое и формат ячейки. Некоторые обычные свойства приведены в таблице 19.1.
  • Класс RenderContext реализует компонент отображения, на него возложена обязанность отображать лист в объекты DOM.
  • Класс TableControl является основным контроллером, принимающим события мыши и клавиатуры. Как только он получит событие, связанное с отображением, например, прокруткой и изменением размеров, он обновляет связанный с ними объект RenderContext. Как только он получит обновления события, которые влияют на содержимое листа, он создает новые команды, которые помещаются в очередь команд листа.
  • Класс SpreadSheetControl является пользовательским интерфейсом верхнего уровня с панелями инструментов, строками состояний, диалоговыми окнами и палитрами для выбора цвета.
  • Класс SpreadSheetViewer является альтернативным пользовательским интерфейсом верхнего уровня, который предназначен только для интерактивного просмотра.

Таблица 19.1: Содержимое и форматы ячеек

datatypet
datavalue1Q84
colorblack
bgcolorwhite
fontitalic bold 12pt Ubuntu
commentIchi-Kyu-Hachi-Yon

Мы взяли на вооружение систему объектов с минимальным количеством классов и простыми механизмами композиции/делегирования и не использовали наследование или прототипы объектов. Все символы помещаются в пространство имен SocialCalc.* с тем, чтобы избежать конфликта имен.

Каждое обновление на листе проходит через метод ScheduleSheetCommands, который принимает строку, представляющую собой команду редактирования. Некоторые обычные команды показаны в таблице 19.2. В приложении, в которое встроен SocialCalc, можно самостоятельно определять дополнительные команды при помощи добавления именованных обратных вызовов в объект SocialCalc.SheetCommandInfo.CmdExtensionCallbacks и использования команды startcmdextension для обращения к ним.

Таблица 19.2: Команды SocialCalc

    set     sheet defaultcolor blue
    set     A width 100
    set     A1 value n 42
    set     A2 text t Hello
    set     A3 formula A1*2
    set     A4 empty
    set     A5 bgcolor green
    merge   A1:B2
    unmerge A1
    erase   A2
    cut     A3
    paste   A4
    copy    A5
    sort    A1:B9 A up B down
    name    define Foo A1:A5
    name    desc   Foo Used in formulas like SUM(Foo)
    name    delete Foo
    startcmdextension UserDefined args


Далее: Цикл работы команд


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют