Sunday, April 25, 2010

ASP.NET Dynamic Data MVC Preview под лупой

В этом посте давайте разберёмся с тем, какая функциональность заложена в ASP.NET Dynamic Data MVC Preview. Это станет логическим продолжением того, что мы делали в предыдущем посте и станет заключительным этапом приготовления к хардкодингу.

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



Начнём с папки 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