Типы, структуры данных и коллекции

Концепция работы с данными

Приложение в веб-фреймворке Wasaby строится по концепции MVC.

MVC в WS

В срезе визуальных компонентов (контролов) принимается, что:

  • моделью является или абстрактная модель (для простых контролов), или коллекция (для контролов коллекций). Для привязки значений используется механизм binding-ов;
  • представлением являются контролы;
  • контроллерами являются прикладные модули.

Схема работы приложения:

  • контроллер манипулирует моделью, внося изменения в ее состояние:
    • в случае абстрактной модели — меняет значения ее полей;
    • в случае коллекции — добавляет/удаляет/обновляет элементы коллекции;
  • представление получает от модели уведомления об изменении состояния и актуализирует внешний вид согласно изменениям.

Визуальные компоненты веб-фреймворка обладают богатым функционалом "из коробки". Поэтому они часто сочетают в себе функции контроллера (например, списочный контрол сам изменяет отображаемую коллекцию при использовании постраничной навигации). Если какое-то поведение является для вас избыточным, то обычно его можно выключить в настройках контрола. После этого можно реализовать нужное вам поведение через свой контроллер.

Далее мы будем рассматривать только контролы коллекций, которые являются самым сложным типом визуального представления. В настоящее время они умеют работать только с одним видом коллекций — списком записей (рекордсетом). В будущем планируется обеспечить работу контролов и с примитивными коллекциями.

Работа с данными в контролах коллекций

В веб-приложениях данные обычно поставляются специализированным back-end-ом, работающим по одному из протоколов сетевой модели OSI (как правило HTTP). Также существует большой набор стандартизованных протоколов кодирования передаваемых данных. Это, например, JSON-RPC, XML-RPC, SOAP.

Для обеспечения возможности использовать веб-фреймворк с любым back-end'ом, выделен интерфейс источника данных. Поддержка различных форматов кодирования данных осуществляется через набор адаптеров, которые могут внедряться в модели и источники данных.

Чтобы подключить новый back-end, нужно лишь реализовать источник данных, работающий по его протоколу и с его форматом данных.

Источники данных используются контролами для решения следующих задач:

  • получение списка записей (выборки) для отображения;
  • отправка измененных записей обратно в источник (синхронизация операций изменения, добавления, удаления).

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

  1. Данные будут внедрены в контрол явно (в виде экземпляра коллекции);
  2. Данные будут получены самим контролом через специализированный объект — источник данных.

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

Для реализации этих сценариев контрол агрегирует два объекта:

  • items — коллекция для отображения;
  • dataSource — источник данных.

Взаимодействие контрола с коллекцией и источником данных

Доступ контрола к коллекции осуществляется через интерфейс перебора коллекции Collection/IEnumerable и интерфейс списка Collection/IList — они позволяет получать элементы коллекции.

Уведомление контрола об изменениях коллекции осуществляется через интерфейс привязки к коллекции Collection/IBind — он позволяет перерисовывать изменившиеся/добавленные/удаленные элементы коллекции.

При подключении источника данных, реализующего интерфейс Source/ISource, контрол будет получать через него коллекцию для отображения (если она не была задана явно), а также сохранять в него все изменения. Подключение источника данных не является обязательным — можно работать только с коллекцией.

Диаграмма компонентов для контрола коллекции

  • items — коллекция, отображаемая контролом;
  • dataSource — источник данных.

Диаграмма классов для контрола коллекции

См. также