17. Проблема: 1 метод на 1 URL
• Огромные контроллеры
• Нечеткие критерии группировки методов
• Мало базовых классов
• Сервисные методы раздувают
контроллеры
21. Сложности с именами view
/View
/Home
/Execute.chtml
/News
/Execute.chtml
/Products
/Execute.chtml
/NextPage.chtml
/Product
/Execute.chtml
22. Свой ViewEngine
/View
/Home.xslt
/News.xslt
/Products.xslt
/Products_NextPage.xslt
/Product.xslt
23. Преимущества
• Один контроллер – одно действие
• Контроллеры маленькие
• Общий функционал → в базовый класс
• Создаем DSL*
• Дружит с Dependency Injection*
44. Dependency inversion principle
Модули верхних уровней не должны
зависеть от модулей нижних уровней.
Модули должны зависеть от абстракций.
Абстракции не должны зависеть от
деталей. Детали должны зависеть от
абстракций.
SOLID
48. Указание зависимостей
public class HomeController : Controller
{
[Dependency]
public INewsService NewsService { get; set; }
public HomeController( IDatabase database ) { … }
…
}
49. Настройка DI-контейнера
• Связь между интерфейсом и реализацией*
• Контроль за жизнью объекта
<register type="INewsService"
mapTo="NewsService">
<lifetime type="singleton"/>
</register>
* Не обязательно
59. Ajax delivers
• Не надо сериализовать всю страницу
• При ошибке можно повторить
• Трафик меньше на порядки
60. Правила
1. Один контроллер – одно действие
2. Модель – член класса
3. Задавайте маршруты явно
4. Делайте собственные DSL
5. Используйте DI
6. Используйте Ajax для редактирования