Я довольно новичок в ASP.NET MVC и сейчас пытаюсь разобраться с некоторыми концепциями дизайна. Одна вещь, на которой я сейчас застрял, это то, как (лучше) справиться с ситуацией, подобной описанной ниже.
Предположим, у меня есть страница, на которой нужно отобразить несколько "разделов". Например, с левой стороны есть список, управляемый данными, а затем выбранный элемент в списке отображает дополнительный список в другом разделе на странице. Для лучшего понимания давайте предложим, чтобы левый список представлял собой список категорий фильмов, а другой список отображает список фильмов, которые содержатся в этой категории, вместе с различными деталями фильма.
Теперь у меня есть некоторая форма ORM, такая как Entity Framework, LINQ to SQL или любая другая, которая отображает таблицы базы данных tblCategory и tblMovie в сущности Category и Movie соответственно. Эти сущности живут в пространстве имен MyMVCApp.Data.Entities. Затем я использую шаблон репозитория, расположенный в пространстве имен MyMVCApp.Data, для инкапсуляции запросов (через LINQ) к этим объектам для возврата наших объектов модели.
Это мой первый вопрос. Должно ли хранилище возвращать объекты модели представления или доменные объекты, которые затем расширяются для создания объектов модели представления? В своем наивном уме я вижу сущности, возвращаемые из ORM, просто контейнеры для данных с сущностями домена, содержащими бизнес-логику. Значит, здесь обязательно должна быть абстракция?
В любом случае, вернемся к моему сценарию. Теперь давайте предположим, что я хочу представить два раздела, описанных в начале этого. Я предполагаю, что то, что должно происходить здесь, это то, что моя модель сущности домена будет содержать список категорий и связанных с ними фильмов. Так что-то вроде списка, каждый из которых содержит список.
Эта модель была бы где-то заселена. Это мой второй вопрос. Скажем, мое предположение выше верно, и это просто данные объекты возвращаются из ORM. Теперь у меня есть пространство имен / проект под названием MyMVCApp.Core.Model (или тому подобное) с некоторыми объектами домена, такими как объекты «Фильм» и «Категория», упомянутые в предыдущем абзаце. Есть ли у этих сущностей методы для извлечения данных из ORM и заполнения себя? Или хранилище извлекает эти заполненные модели сущностей? И еще один вопрос в этой части: если в моем ORM есть объект «Фильм и клиент», допустимо ли иметь доменные объекты с одинаковыми именами?
Наконец, я предполагаю, что контроллер теперь имеет этот заполненный список объектов Category и Movie и передает его обратно в представление. Я предполагаю, что лучше иметь каждый из разделов, описанных в начале как частичные представления и передавая заполненную модель каждому? Таким образом, это может быть IndexController, который извлекает заполненный объект CategoryMovies, передавая его частичному представлению Categories и частичному представлению Movies. Затем мне нужно будет как-то определить выбранную категорию (квест-строку?) И отобразить соответствующий список фильмов в этой категории в представлении.
Хорошо, поэтому, если кто-то достигнет этой точки в моих разговорах, я сделаю глубокий поклон. Надеюсь, я достаточно подробно объяснил свои перепутанные мысли и вопросы, чтобы кто-то смог обеспечить какое-то просветление.
Спасибо за внимание! : -)