Вторая конференция .NET разработчиковМетапрограммирование интерфейсов в ASP.NET MVCАлексей ВолковСонда Технолоджиaivolkov.ru
Дублирование кодаhttp://www.flickr.com/photos/popilop/331357312/
Дублирование кода
Дублирование кода
Дублирование кода
http://en.wikipedia.org/wiki/File:2000_core-repository02_hg.jpg
Template Helpers+ Shared Views
Вариант Shared Views
Вариант Shared Views
Вариант Shared Views
Вариант Shared Views
Контроллеры в Shared Views
Сновадублированиекодаhttp://www.flickr.com/photos/kugelfisch/4663326851/
Совершенствование Shared ViewsНаследование от базовых контроллеров
Generic контроллерыВариант generic-контроллеровhttp://aivolkov.ru/2010/10/aspnet-mvc-and-generic-controllers/
Вариант generic-контроллеров
Избавление от «свалки» в Shared
Generic-пути к View-файлам
Generic-пути к View-файламVirtualPathProviderViewEngine.FindViewиVirtualPathProviderViewEngine. GetPathFromGeneralName
Generic-пути к View-файламstring virtualPath = location.Format(name, controllerName, areaName);string urlPart = controllerContext.RouteData.Values[“urlPart"];string virtualPath = location.Format(name, controllerName, areaName, urlPart);
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"            };
Generic-пути к View-файлам
Плюсы от применения подобных подходовЗаметно снижается дублирование кода
Снижается себестоимость разработки
Заметно уже при числе источников данных на одну generic-схему > 5Подводные камниОчень сложные схемы и интерфейсы

Метапрограммирование интерфейсов в ASP.NET MVC Framework