SlideShare une entreprise Scribd logo
1  sur  34
3-я конференция .NET разработчиков 25 сентября 2011 Metadata + JavaScript = ♥  Тимур Рахматиллаев IndyCode http://muyou.koumakan.jp
Сказка о любви между формой и JavaScript’ом ? ? JavaScript Форма
Единство противоположенностей C# Razor ASP.NET Модель Форма Представление + + ? C# Конфигурация JavaScript-контролы
«В лоб!» Размещаем код инициализации с жестко  заданными  параметрами во View Для каждого из возможных применений  JavaScript-контрола – свой View
«В лоб!»
Что делать, если… ,[object Object]
JavaScript-контролысложные большое число параметров конфигурации привязка к полям формы ,[object Object],[object Object]
Использование атрибутов [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(@"{5}+")] [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; }
Атрибуты – лишь намек на серьезные отношения Форма Атрибуты  DataAnnotations Поля формы
Использование полей формы publicclassDataLetterForm { publicstringLoveLetter { get; set; } publicintRousesCount { get; set; } } // ... publicActionResultExample() { varmodel = newDataLetterForm{RousesCount= 101 }; returnView(model); }
Использовать поля формы – ниже рыцарского достоинства Форма Атрибуты  DataAnnotations Поля формы
Недостатки решений «из коробки» ,[object Object]
Лишний вспомогательный код
Workaround
Трудность для восприятия и навигации,[object Object]
Метаданные!
Концепция метаданных Конфигурация  метаданных Форма Поля формы
Метаданные формы publicclassLetterFormMetadata:ModelMetadataConfiguration<LetterForm> 	{ publicLetterFormMetadata() 		{ Configure(x => x.LoveLetter) .HideForDisplay() .DisplayName("Любовное послание") .Template("LoveLetter") .IncludeRoses(101);                 		} 	}
Конструирование метаданных
Рецепт хороших метаданных ,[object Object]
Метод-расширение для соответствующего Builder’а
Немного кода во View(добавлять по вкусу),[object Object]
… и как строятся Метаданные Билдер Методы Методы- расширения Описание  свойства settings
А если сложнее?
Говорим на языке JavaScript’а ?
Используем JSON ,[object Object]
JSON-объект является объектом инициализации контрола
Применимо для большинства контролов (jQuery UI и другие),[object Object]
Newtonsoft.Json

Contenu connexe

En vedette

Big switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftBig switch: жизнь после Microsoft
Big switch: жизнь после Microsoft
Alexander Byndyu
 
Метапрограммирование интерфейсов в ASP.NET MVC Framework
Метапрограммирование интерфейсов в ASP.NET MVC FrameworkМетапрограммирование интерфейсов в ASP.NET MVC Framework
Метапрограммирование интерфейсов в ASP.NET MVC Framework
Alexander Byndyu
 
Автоматизированное тестирование веб приложений
Автоматизированное тестирование веб приложенийАвтоматизированное тестирование веб приложений
Автоматизированное тестирование веб приложений
Alexander Byndyu
 
Agile: разработка + тестирование
Agile: разработка + тестированиеAgile: разработка + тестирование
Agile: разработка + тестирование
Alexander Byndyu
 

En vedette (14)

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

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

паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данных
Vitaliy Trenkenshu
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
GoSharp
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
yaevents
 

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

Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данных
 
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данных
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
Расширение библиотеки Slick
Расширение библиотеки SlickРасширение библиотеки Slick
Расширение библиотеки Slick
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
JDBC
JDBCJDBC
JDBC
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капля
 
Шаблоны проектирования 1
Шаблоны проектирования 1Шаблоны проектирования 1
Шаблоны проектирования 1
 
Лекция #7. Django ORM
Лекция #7. Django ORMЛекция #7. Django ORM
Лекция #7. Django ORM
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
SQL Server Denali
SQL Server DenaliSQL Server Denali
SQL Server Denali
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 

Plus de Alexander Byndyu

Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Alexander Byndyu
 

Plus de Alexander Byndyu (20)

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

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