Вы назвали три вещи здесь:
- Статистика сайта
- Динамические меню
- Что бы еще ни [...] могло бы прийти из базы данных
Этот третий пункт - ловушка; просто то, что что-то есть в вашей базе данных, не означает, что это часть вашей доменной модели.
Навигация может основываться на базе данных. Это может также быть в карте сайта или жестко запрограммировано в приложении. На самом деле это не приложение data , это приложение configuration . Если вы храните его в базе данных приложения, это нормально (ну, не совсем), но это , а не часть самой модели.
Точно так же статистика сайта обычно хранится в базе данных, но она хранится в другой базе данных , в частности, в аналитической базе данных (и многие люди просто "передают" это в Google). Итак, еще раз, они вида данных, но они не ваша модель.
Если вы хотите, чтобы ваше приложение имело смысл, вам нужно разделить эти проблемы на концептуальном уровне. Навигация выполняется в вашей главной странице / макете, включая любой динамический код, необходимый для его работы. Это логика pure view - не позволяйте ей проникнуть в вашу модель. Вполне нормально и обычно предпочтительнее использовать ViewData / ViewBag для задач, которые связаны с реальной функцией, которая используется в настоящее время.
Теперь, если предположить, что существуют другие виды данных представления, которые на самом деле являются данными приложения: это правда в принципе , что представления должны быть напрямую связаны с моделями, то есть в конце концов что означает «MVC» - но на практике это всего лишь повторная реализация непродуманной идеи «канонической модели данных». Домен и представление - это разные проблемы, и поэтому они подразумевают разные контекстные модели - в последнем случае это модель представления.
Когда я впервые начал работать с MVC, я также неохотно использовал модели представлений. Но после того, как я стал более привыкать к этой идее, я понял, что на самом деле это было подходящее решение only - особенно, когда ваша "модель" - это в основном тонкая оболочка над самой базой данных. Представления и данные меняются по-разному и с разной скоростью; если вы не хотите беспокоиться о постоянном потоке ошибок и регрессий, то вам нужна некоторая изоляция между ними. Создайте слой отображения и назовите его днем.
На данный момент я приступил к созданию другой модели вида для каждого вида, независимо от того, думаю мне это или нет. Вначале это может быть не что иное, как точная копия класса модели, но это означает, что я могу настроить его в любое время и любым способом, не прибегая к базовой модели - и наоборот. Как говорит тв , исходную модель вида легко создать с помощью AutoMapper , и она займет, возможно, 30 секунд вашего времени.
Просто используйте модели представлений и надеемся, что в конечном итоге инструменты будут поддерживать автогенерацию моделей представлений.