Слайд 2Дублирование кода
http://www.flickr.com/photos/popilop/331357312/
![Дублирование кода http://www.flickr.com/photos/popilop/331357312/](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-1.jpg)
Слайд 6http://en.wikipedia.org/wiki/File:2000_core-repository02_hg.jpg
![http://en.wikipedia.org/wiki/File:2000_core-repository02_hg.jpg](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-5.jpg)
Слайд 7Template Helpers
+ Shared Views
![Template Helpers + Shared Views](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-6.jpg)
Слайд 13Снова дублирование кода
http://www.flickr.com/photos/kugelfisch/4663326851/
![Снова дублирование кода http://www.flickr.com/photos/kugelfisch/4663326851/](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-12.jpg)
Слайд 14Совершенствование Shared Views
Наследование от базовых контроллеров
Generic контроллеры
![Совершенствование Shared Views Наследование от базовых контроллеров Generic контроллеры](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-13.jpg)
Слайд 15Вариант generic-контроллеров
http://aivolkov.ru/2010/10/
aspnet-mvc-and-generic-controllers/
![Вариант generic-контроллеров http://aivolkov.ru/2010/10/ aspnet-mvc-and-generic-controllers/](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-14.jpg)
Слайд 19Generic-пути к View-файлам
VirtualPathProviderViewEngine.FindView
и
VirtualPathProviderViewEngine. GetPathFromGeneralName
![Generic-пути к View-файлам VirtualPathProviderViewEngine.FindView и VirtualPathProviderViewEngine. GetPathFromGeneralName](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-18.jpg)
Слайд 20Generic-пути к View-файлам
string virtualPath = location
.Format(name, controllerName, areaName);
string urlPart = controllerContext.RouteData.Values[“urlPart"];
string virtualPath
![Generic-пути к View-файлам string virtualPath = location .Format(name, controllerName, areaName); string urlPart](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-19.jpg)
= location
.Format(name, controllerName, areaName, urlPart);
Слайд 21Generic-пути к View-файлам
ViewLocationFormats = new[] {
"~/Views/{1}/{3}/{0}.cshtml",
"~/Views/{1}/{3}/{0}.vbhtml",
"~/Views/{1}/{0}.cshtml",
"~/Views/{1}/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml",
![Generic-пути к View-файлам ViewLocationFormats = new[] { "~/Views/{1}/{3}/{0}.cshtml", "~/Views/{1}/{3}/{0}.vbhtml", "~/Views/{1}/{0}.cshtml", "~/Views/{1}/{0}.vbhtml", "~/Views/Shared/{0}.cshtml", "~/Views/Shared/{0}.vbhtml" };](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-20.jpg)
"~/Views/Shared/{0}.vbhtml"
};
Слайд 23Плюсы от применения подобных подходов
Заметно снижается дублирование кода
Снижается себестоимость разработки
Заметно уже при
![Плюсы от применения подобных подходов Заметно снижается дублирование кода Снижается себестоимость разработки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-22.jpg)
числе источников данных на одну generic-схему > 5
Слайд 24Подводные камни
Очень сложные схемы и интерфейсы
Применение в неподходящих случаях
![Подводные камни Очень сложные схемы и интерфейсы Применение в неподходящих случаях](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/475549/slide-23.jpg)