Добро пожаловать Гость, вы находитесь: Вход

Изображение Flexberry Wiki

Представления (View)

RSS
Изменено 2015-05-28 22:30 TOsotova Категоризировано Flexberry ORM, Public, View (представление)


  • Продукт: Flexberry ORM
  • Программная библиотека: ICSSoft.STORMNET.DataObject.dll
  • Предназначение: Представление (ракурс) описывает некоторую логическую совокупность собственных атрибутов класса, мастеров любой вложенности и их атрибутов, представлений детейлов.






Определение представления

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

Назначение представлений

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

Наследование представлений

Объявленные статически представления наследуются (наследуемые представления), т.е. представления, объявленные для предков, действительны для потомков, более того, работа для любого объекта потомка через класс (тип) предка обеспечивается полиморфно для потомков (например, если есть список для некоторого класса, то все объекты потомков этого класса могут быть отображены в этом же списке, в этом же представлении). Статически объявленные для предков представления могут быть полностью переопределены в наследниках.

В связи с наследованием представлений:

Задание представлений

Представление может быть задано:
  • статически (приписано метаданными-атрибутами к классам данных)
  • динамически (конструироваться в исходном коде).

Представления приписываются классам данных и именуются.


Статически заданные представления

Статически, представление определяется следующими атрибутами:
  1. ViewAttribute — объявляет представление для класса. Указывается имя представления и состав собственных и мастеровых свойств произвольного уровня. Формат указания:
    [(Имя св-ва мастера).(Имя св-ва мастера мастера).(Имя св-ва мастера мастера мастера ...).](Имя атрибута) [as (пользовательское имя атрибута)] [on (путь расположения на форме)]

  2. AssociatedDetailViewAttribute — указывает для представления класса-шапки представление детейла, поскольку представление шапки включает в себя представление детейла. Здесь же можно указать:
    1. Должны ли детейлы прочитываться сервисами данных вместе с загрузкой шапки;
    2. Путь расположения на форме;
    3. Заголовок на форме;
    4. Видимость на форме;
    5. Имена агрегирующих функций, доступных пользователю из данного представления;
    6. Должно ли представление быть адаптивным (UseAdaptiveViewsLoading).

  3. MasterViewDefineAttribute — дополнительно настраивает мастера в представлении шапки, можно указать:
    1. Тип выбора (lookup type) мастерового объекта;
    2. Строку для инициализации объекта (контрола) выбора мастерового объекта;
    3. Отображаемое свойство при типе выбора LookupTypeEnum.Combo.

Путь расположения на форме указывается строкой вида:

[-|][Имя][\ [-|][Имя]]…

где:
  • «-» означает группировку (GroupBox),
  • «|» - закладку (Tab) на формах редактирования,
  • «\» — разделитель пути.
  • «Имя» — имя соответствующей закладки/группы.



В качестве имён свойств можно указывать «*», что будет означать, что необходимо использовать все свойства. Например, если просто указать «*», то в представление автоматически попадают все собственные свойства, если указать «Master.*», то это будет означать, что в представление попадают все свойства указанного мастера. Программист может отключить автоматическое попадание какого-либо свойства в представление указанием перед свойством атрибута DisableAutoViewing.

Пример статически определённых представлений:

[View("Generator", new string[] { "Company on \‘|Common\-Copyright\’", "Product on \’|Common\-Copyright\’", "Copyright on \’|Common\-Copyright\’ ", "Version" } ) ]
[AssociatedDetailView( "Generator", "Classes", "Generator", true, "", "", true, new string[] { } )] 
[AssociatedDetailView( "Generator", "Inheritances", "Generator", true, "", "", true, new string[] { } )] 
[View( "Edit", new string[] { "Company", "Product", "Copyright", "Version", "DataObjectNameSpace" } ) ]
public class Stage:STORMCASE.Repository.Stage
{
	…
}

В RunTime представления являются экземплярами класса ICSSoft.STORMNET.View. Разработчик может получить проинициализированный экземпляр класса, соответствующий статически определённому представлению, вызовом метода Information.GetView, либо через специальные статические свойства.

Динамически заданные представления

Для того, чтобы динамически определить представление, необходимо конструировать экземпляр класса View (пример). Это можно сделать четырьмя способами:
  1. Конструировать пустое представление, затем пользоваться методами DefineClassType, AddDetailInView, AddMasterInView, AddProperty для дальнейшего определения.
  2. Конструировать представление с указанием экземпляра класса ViewAttribute (он же атрибут, служащий для задания статических представлений).
  3. Конструировать представление по проинициализированным свойствам (загруженные + отличные от внутренней копии данных) объекта данных.
  4. Конструировать представление «по-умолчанию» (попадают только собственные свойства, а также детейловые свойства, что указывается соответствующим параметром)

Также, через методы класса View можно полностью получить структуру представления, а также изменить её (получить/добавить/удалить элементы, входящие в представление).
Стоит также отметить, что настоятельно рекомендуется определять имя для динамически создаваемых представлений.

Important
Кеширование View на форме для разных вычиток может приводить к ошибкам, поскольку при чтении с наложением ограничения конкретная инстанция View может быть изменена сервисом данных.

Дополнительные сведения о представлениях


Откуда ссылаются на эту страницу


Куда ссылается эта страница



На этой странице ещё нет сообщений. Ваше будет первым!

ScrewTurn Wiki version 3.0.5.600. Some of the icons created by FamFamFam.