Посмотрим на структуру проекта:

Начнём с папки EntityTemplates:
- DynamicEntityExtensions — содержит HTML-хелперы (расширения класса HtmlHelper) для отображения динамической сущности, то есть записи в таблице, или, более строго, её объектной модели, сгенерированной, например, LINQ to SQL. Хелперы (там он на самом деле всего один, но перегруженный) ищут нужный шаблон для просмотра или редактирования сущности в папке EntityTemplates. В этой папке (она находится в соседнем, но недоступном проекте BlogSample, ой он оказался не таким уж и бесполезным :)) определены два стандартных шаблона, общих для всех типов сущностей: Default.ascx и Default_Edit.ascx. Можно задавать свои шаблоны для каких-то специальных типов сущностей.
- DynamicEntityModel — дословно, динамическая модель сущности. По сути это модель данных, плюс мета-данные. Мы можем получить, например, список полей, доступных для скафолдинга, причём не просто полей, а мета-моделей полей, чтобы можно было показать не только значения, но и подписи к ним. Через модель получаем занчения, а через мета-модель — подписи к этим значениям.
- DynamicEntityUserControl — два расширения для класса ViewUserControl и ViewUserControl<tmodel>, которые потом будут наследовать все шаблоны-представления для динамических данных. Сделано это только для того, чтобы представления были строготипизированными, благодаря чему, например, будет работать IntelliSence в шаблонах.
Следующая папочка с целой кучей всего — FieldTemplates. Там нет ничего особо интересного. Здесь определяется почти вся та же функциональность, что была на уровне сущности в EntityTemplates, только на уровене полей сущности: динамические модели, шаблоны.
- DynamicFieldModel, DynamicFieldChildrenModel, DynamicFieldForeignKeyModel — динамические модели для полей: обычных, внешних ключей и дочерних записей. DynamicFieldChildrenModel — это то же самое, что и DynamicFieldForeignKeyModel, только со стороны родителя.
- DynamicFieldUserControl, DynamicFieldChildrenUserControl, DynamicFieldForeignKeyUserControl — строготипизированные шаблоны-представления.
- DynamicFieldExtensions — содержит extension-метод RenderDynamicField
ModelBinder:
- MetaColumnExtensions — всего пара строк: метод IsSerialized, расширяющий класс MetaColumn;
- DynamicDataModelBinder — реализует IModelBinder для привязки пришедших данных от пользователя к какой-либо модели.
Utility содержит всякие вспомогательные классы, используемые другими методами в вышеперечисленных классах.
No comments:
Post a Comment