Метапрограммирование интерфейсов в ASP.NET MVC Алексей Волков Сонда Технолоджи aivolkov.ru Вторая конференция.NET разработчиков
Дублирование кода
Дублирование кода
Template Helpers + Shared Views
Вариант Shared Views
Контроллеры в Shared Views
Снова дублирование кода
Совершенствование Shared Views Наследование от базовых контроллеров Generic контроллеры
Вариант generic-контроллеров aspnet-mvc-and-generic-controllers/
Вариант generic-контроллеров
Избавление от «свалки» в Shared
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
Подводные камни Очень сложные схемы и интерфейсы Применение в неподходящих случаях
Спасибо за внимание Алексей Волков Сонда Технолоджи twitter.com/AIVolkov