SlideShare a Scribd company logo
3-я конференция .NET разработчиков25 сентября 2011Metadata + JavaScript = ♥ Тимур РахматиллаевIndyCodehttp://muyou.koumakan.jp
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурирования комплексных JavaScript-контролов через Fluent-интерфейс
Сказка о любви между формой и JavaScript’ом??JavaScriptФорма
Единство противоположенностейC#RazorASP.NETМодельФормаПредставление++?C#КонфигурацияJavaScript-контролы
«В лоб!»Размещаем код инициализации с жестко заданными  параметрами во ViewДля каждого из возможных применений JavaScript-контрола – свой View
«В лоб!»
Что делать, если…Требуется валидация введенных данных (в т.ч. серверная)
JavaScript-контролысложныебольшое число параметров конфигурациипривязка к полям формыПовторное использование JavaScript-контролов (работа «из коробки»)Конфигурирование на стороне сервера (C#-код)ФормаАтрибуты DataAnnotationsПоля формы
Использование атрибутов[AttributeUsage(AttributeTargets.Property)]publicclassRosesCountAttribute : Attribute{publicintRosesCount { get; privateset; }publicRosesCountAttribute(introsesCount)	{RosesCount= rosesCount;	}}
Использование атрибутов. ФормаpublicclassAttributesLetterForm{[RosesCount(101)]publicstringLoveLetter { get; set; }}
Использование атрибутов…О ужас!varattribute = typeof(AttributesLetterForm).GetProperty("LoveLetter")        .GetCustomAttributes(typeof(RosesCountAttribute), true)		.SingleOrDefault() asRosesCountAttribute;varrosesCount = attribute != null			? attribute.RosesCount: 0;
Еще больше ужаса[Required][RegularExpression(@"\d{5}\-\d+")][DisplayName("My dear field one")][UIHint("DearFieldOne")][RosesCount(5)][VeryCustom("This", "Attrbiute", "Is", "So", "Long")][Editable(true)]publicstringFieldOne { get; set; } [Required][DisplayFormat(DataFormatString = "M")][DisplayName("My cute field two")][UIHint("CuteFieldTwo")][RosesCount(7)][VeryCustom("This", "Attrbiute", "Takes", 6, "Strings", "And", 2, "Integers")][Display(Order = 5)]publicDateTimeFieldTwo { get; set; }
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурирования комплексных JavaScript-контролов через Fluent-интерфейс
Атрибуты – лишь намек на серьезные отношенияФормаАтрибуты DataAnnotationsПоля формы
Использование полей формыpublicclassDataLetterForm{publicstringLoveLetter { get; set; }publicintRousesCount { get; set; }}// ...publicActionResultExample(){varmodel = newDataLetterForm{RousesCount= 101 };returnView(model);}
Использовать поля формы – ниже рыцарского достоинстваФормаАтрибуты DataAnnotationsПоля формы
Недостатки решений «из коробки»Недостаточная гибкость
Лишний вспомогательный код
Workaround
Трудность для восприятия и навигацииMvcExtensionsприходит на помощьMvcExtensionsФормаJavaScript
Метаданные!
Концепция метаданныхКонфигурация метаданныхФормаПоля формы
Метаданные формыpublicclassLetterFormMetadata:ModelMetadataConfiguration<LetterForm>	{publicLetterFormMetadata()		{Configure(x => x.LoveLetter).HideForDisplay().DisplayName("Любовное послание").Template("LoveLetter").IncludeRoses(101);                		}	}
Конструирование метаданных
Рецепт хороших метаданныхРеализация  интерфейса IModelMetadataAdditionalSetting для хранения метаданных данных
Метод-расширение для соответствующего Builder’а
Немного кода во View(добавлять по вкусу)Из чего же они состоят…МетаданныеОписание свойстваsettings
… и как строятсяМетаданныеБилдерМетодыМетоды-расширенияОписание свойстваsettings
А если сложнее?
Говорим на языке JavaScript’а?
Используем JSONСериализация данных, хранимых в setting в формат JSON
JSON-объект является объектом инициализации контрола
Применимо для большинства контролов (jQuery UI и другие)Нам потребуется…MvcExtensions
Newtonsoft.Json

More Related Content

PPTX
Windows Phone School HSE Lecture 5
PPTX
Fuse8.domain framework - анонс библиотеки для работы с данными
PPTX
Расширение функциональности с использованием метаданных и аспектно-ориентиров...
PPTX
Аспектно-ориентированный подход на службе веб-приложений
PPT
Getting Tested: методология интеграционного тестирования
PPTX
Highload. Создание специализированных высокопроизводительных индексов
PPTX
IronRuby: внутренности и примеры использования
PPTX
Практика работы с крупными проектами - от Scrum с XP к Kanban
Windows Phone School HSE Lecture 5
Fuse8.domain framework - анонс библиотеки для работы с данными
Расширение функциональности с использованием метаданных и аспектно-ориентиров...
Аспектно-ориентированный подход на службе веб-приложений
Getting Tested: методология интеграционного тестирования
Highload. Создание специализированных высокопроизводительных индексов
IronRuby: внутренности и примеры использования
Практика работы с крупными проектами - от Scrum с XP к Kanban

Viewers also liked (14)

PPTX
DreamSpark
PDF
Карьера в IT
PPTX
PPTX
WebsiteSpark
PPTX
Прагматичный подход к разработке гибких программных систем
PPTX
Big switch: жизнь после Microsoft
PPTX
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
PPTX
Метапрограммирование интерфейсов в ASP.NET MVC Framework
PPTX
Автоматизированное тестирование веб приложений
PPTX
Agile: разработка + тестирование
PPT
Приемочные тесты на огурце
PDF
Пробуем Kanban!
PPTX
TDD или как не выстрелить себе в ногу
PPTX
Построение процесса тестирования
DreamSpark
Карьера в IT
WebsiteSpark
Прагматичный подход к разработке гибких программных систем
Big switch: жизнь после Microsoft
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Метапрограммирование интерфейсов в ASP.NET MVC Framework
Автоматизированное тестирование веб приложений
Agile: разработка + тестирование
Приемочные тесты на огурце
Пробуем Kanban!
TDD или как не выстрелить себе в ногу
Построение процесса тестирования
Ad

More from Alexander Byndyu (20)

PDF
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
PDF
Применение low-code платформ в энтерпрайзе
PDF
Антихрупкость в IT или как полюбить изменения
PDF
Карта гипотез как метод стратегического планирования
PPTX
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
PDF
История о том, как техническое задание подменяет цель проекта
PDF
Шпаргалка по IT-миру для предпринимателя
PDF
Микросервисы, чистый PaaS и конкурс Мисс Россия
PDF
IT-директор на аутсорсе
PDF
Бизнес-гибкость через микросервисную архитектуру
PDF
Impact Mapping на практике v2
PDF
Кнопочное мышление против целостного IT-продукта
PDF
Пять самых важных составляющих процесса выпуска продуктов
PDF
Пять самых важных составляющих процесса выпуска проектов
PDF
Час Кода 2015
PDF
Impact mapping in practice
PPTX
Impact Mapping на практике
PDF
Customer satisfaction для программистов
PDF
CQRS на практике. В поиске точки масштабирования и новых метафор
PDF
Как размножается Sphinx
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Применение low-code платформ в энтерпрайзе
Антихрупкость в IT или как полюбить изменения
Карта гипотез как метод стратегического планирования
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
История о том, как техническое задание подменяет цель проекта
Шпаргалка по IT-миру для предпринимателя
Микросервисы, чистый PaaS и конкурс Мисс Россия
IT-директор на аутсорсе
Бизнес-гибкость через микросервисную архитектуру
Impact Mapping на практике v2
Кнопочное мышление против целостного IT-продукта
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска проектов
Час Кода 2015
Impact mapping in practice
Impact Mapping на практике
Customer satisfaction для программистов
CQRS на практике. В поиске точки масштабирования и новых метафор
Как размножается Sphinx
Ad

Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурирования комплексных JavaScript-контролов через Fluent-интерфейс