Нет хорошего использования базового класса контроллера.
Теперь выслушай меня.
Asp.Net MVC, особенно MVC 3, имеет тонны хуков расширяемости, которые обеспечивают более свободный способ добавления функциональности ко всем контроллерам. Так как ваши классы контроллеров очень важны и важны для приложения, очень важно, чтобы они были легкими, гибкими и слабо связаны со всем остальным.
Инфраструктура ведения журнала принадлежит
конструктор и должен быть введен
через DI-фреймворк.
Строительные леса CRUD должны обрабатываться
генерация кода или кастом
ModelMetadata провайдера.
Глобальная обработка исключений должна быть
обрабатывается пользовательским ActionInvoker.
Глобальный просмотр данных и авторизация
должны обрабатываться фильтрами действий.
Еще проще с глобальными фильтрами действий
в MVC3.
Константы могут помещаться в другой класс / файл с именем ApplicationConstants или что-то в этом роде.
Базовые контроллеры обычно используются неопытными разработчиками MVC, которые не знают всех частей расширяемости MVC. Теперь не поймите меня неправильно, я не осуждаю и не работаю с людьми, которые используют их по всем неправильным причинам. Это просто опыт, который предоставляет вам больше инструментов для решения типичных проблем.
Я почти уверен, что нет ни одной проблемы, которую вы не можете решить с помощью другого хука расширяемости, кроме базового класса контроллера. Не принимайте наименьшую форму сцепления (наследования), если нет существенной причины производительности и вы не нарушаете Лискова. Я бы предпочел потратить <1 секунду, чтобы 20 раз набрать свойство для моих контроллеров, например <code>public ILogger Logger { get; set; }, чем ввести жесткую связь, которая влияет на приложение гораздо более значительными способами.
Даже что-то вроде userId или мультитенантного ключа может идти в ControllerFactory вместо базового контроллера. Стоимость соединения базового класса контроллеров просто не стоит.