21.09.2010, 19:29
|
#1
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
А по-моему, все очень стройно реализовано: - FormObject - общее представление элемента управления на форме, который может быть реализован либо в виде display/edit-метода, либо в виде поля.
- FormObjectSet - набор таких элементов, которым можно оперировать как единой записью: создавать, инициализировать, удалять, переходить к предыдущей/следующей/первой/последней, перечитывать, фильтровать;
- FormDataObject - позволяет задавать поведение FormObject посредством свойств allowEdit/enabled/mandatory/skip/visible, но совершенно не факт, что для всех FormObject'ов можно задавать это поведение. Он уже знает, что для него можно вызвать lookup, и что на форме могут быть созданы связанные с ним элементы управления (allowAdd).
- FormDataSource - это уже объединение объектов FormDataObject, позволяющее, кроме прочего, управлять поведением лежащего в его основе объекта FormObjectSet, скажем, разрешать/запрещать создание/редактирование/удаление записей. Занятно, что у него также есть метод functionObject(), который для функции возвращает все тот же FormObject. Кроме этого, FormDataSource - это некий частный случай, связанный с Query и QueryRun: он умеет автоматически создавать Query, он уже "знает", что может быть связан с другим FormDataSource'ом (joinSource) и умеет получать уведомления от него (linkActive), он знает, что связан с определенной таблицей, что на ней могут быть индексы, по которым можно сортировать записи, и что из нее можно тянуть лишь те поля, для которых есть отображаемые на форме контролы, он умеет кэшировать табличные display-методы и раскрашивать отдельные поля (FormObjectSet - только строки целиком), умеет помечать несколько записей и перебирать помеченные.
В общем, по-моему, это абстракции совершенно разных уровней: FormObject/FormObjectSet - "совсем" общее представление наборов данных, а FormDataObject/FormDataSource - их частные случаи, привязанные к таблицам, запросам и элементам управления на форме (отсюда всякие рюшечки и управление поведением на форме). За счет этого можно отделить логику обработки наборов данных произвольного происхождения от логики, завязанной на рюшечки или специфику выборки данных с помощью запросов (Query).
|
|
За это сообщение автора поблагодарили: MikeR (4). |