Задачи проектирования визуального редактора документов Lexi, построенного по принципу «что видишь, то и получаешь» (WYSIWYG)

Пользовательский интерфейс редактора Lexi. WYSIWYG-представление документа занимает большую прямоугольную область в центре. В документе могут произвольно сочетаться текст и графика, отформатированные разными способами. Вокруг документа - привычные выпадающие меню и полосы прокрутки, а также значки с номерами для перехода на нужную страницу документа.

  1. структура документа. Выбор внутреннего представления документа отражается практически на всех аспектах дизайна. Для редактирования, форматирования, отображения и анализа текста необходимо уметь обходить это представление. Способ организации информации играет решающую роль при дальнейшем проектировании;
  2. форматирование. Как в Lexi организованы текст и графика в виде строк и колонок? Какие объекты отвечают за реализацию стратегий форматирования? Взаимодействие данных стратегий с внутренним представлением документа;
  3. создание привлекательного интерфейса пользователя. В состав пользовательского интерфейса Lexi входят полосы прокрутки, рамки и оттененные выпадающие меню. Вполне вероятно, что количество и состав элементов интерфейса будут изменяться по мере его развития. Поэтому важно иметь возможность легко добавлять и удалять элементы оформления, не затрагивая приложение;
  4. поддержка стандартов внешнего облика программы. Lexi должен без серьезной модификации адаптироваться к стандартам внешнего облика программ, например, таким как Motif или Presentation Manager (PM);
  5. поддержка оконных систем. В оконных системах стандарты внешнего облика обычно различаются. По возможности дизайн Lexi должен быть независимым от оконной системы;
  6. операции пользователя. Пользователи управляют работой Lexi с помощы элементов интерфейса, в том числе кнопок и выпадающих меню. Функции которые вызываются из интерфейса, разбросаны по всей программе. Разработать единообразный механизм для доступа к таким «рассеянным» функциям и для отмены уже выполненных операций довольно трудно;
  7. проверка правописания и расстановка переносов. Поддержка в Lexi таких аналитических операций, как проверка правописания и определение мест переноса. Как минимизировать число классов, которые придется модифицировать при добавлении новой аналитической операции?




При проектировании Lexi мы применили восемь различных паттернов:
  • компоновщик для представления физической структуры документа;
  • стратегия для возможности использования различных алгоритмов форматирования;
  • декоратор для оформления пользовательского интерфейса;
  • абстрактная фабрика для поддержки нескольких стандартов внешнего облика;
  • мост для поддержки нескольких оконных систем;
  • команда для реализации отмены и повтора операций пользователя;
  • итератор для обхода структур объектов;
  • посетитель для поддержки неизвестного заранее числа видов анализа без усложнения реализации структуры документа.
Ни одно из этих проектных решений не ограничено документо-ориентированными редакторами вроде Lexi. На самом деле в большинстве нетривиальных приложений есть возможность воспользоваться многими из этих паттернов, быть может, для разных целей. В приложении для финансового анализа паттерн компоновщик можно было бы применить для определения инвестиционных портфелей, разбитых на субпортфели и счета разных видов. Компилятор мог бы использовать паттерн стратегия, чтобы поддержать реализацию разных схем распределения машинных регистров для целевых компьютеров с различной архитектурой. Приложения с графическим интерфейсом пользователя вполне могли бы применить паттерны декоратор и команда точно так же, как это сделали мы.