Смущен: зачем мне нужно сопоставить объект-сущность с объектом-моделью - PullRequest
2 голосов
/ 22 декабря 2011

Я - полный новичок в структуре сущностей, mvc только начал с нее 3 недели назад. С тех пор я бился вокруг куста в поисках правильного подхода. Чем больше я копаю, тем больше я теряюсь ... Я боюсь, что я не смогу продолжить работу с использованием фреймворка в mvc

Я потерян и разочарован: (

То, что я пытался сделать, это использовать каркас сущностей для приложения MVC. Для этого я начал с создания файла School.edmx (для которого автоматически создается School.Designer.cs. У меня нет POCO или любые другие, просто обычные edmx с классом конструктора). После некоторого поиска я обнаружил, что плохой практикой является использование объекта-сущности в качестве модели для представления .....

Теперь, когда все началось, я сделал модель представления для объекта сущности. Дело в том, что я не понимаю, почему мне нужно использовать репозиторий, и почему я должен отображать свои объекты сущности и объекты модели представления. Каждый раз, когда я ищу, почему Я должен сопоставить, я получаю некоторые ссылки, говорящие, как использовать automapper, и чем больше я ищу о хранилище, тем больше я теряюсь. Я даже не понимаю это. Почему я должен сопоставить ... ??? и почему я должен использовать хранилище.

А теперь еще одна вещь, которую я неоднократно спрашиваю про себя: зачем мне снова писать аннотацию данных в классе Viewmodel, когда я уже аннотировал их в файле designer.cs (например, [Обязательно], [Email] и другие аннотации) ..? ПОЧЕМУ написать их снова !! (Если я не упоминаю их в модели представления, я не вижу работающие аннотации). Дублирование аннотации ...?

Я потерян и даже не знаю, где я сейчас нахожусь кто-то дает мне правильный путь, чтобы следовать
С уважением,
Потерянный и растерянный новичок

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

Не волнуйтесь!

Entity Framework - большой зверь фреймворка, основанный на другом зверьке фреймворка: ADO.NET. Очень сложно понять Entity Framework, кроме понимания ADO.NET.

При этом Entity Framework является идеальным инструментом в некоторых сценариях. Тем не менее, вы (как и многие из нас), похоже, не понимаете роли EF, ASP.NET MVC и репозитория.

Дело в том, что вам не нужен репозиторий. Вам даже не нужна модель представления. Вам не нужен EF. И вам даже не нужен ASP.NET MVC. Все эти инструменты используются для облегчения конкретных заданий. Ни один из них не имеет прямых связей друг с другом, и любой из них может использоваться независимо друг от друга.

Репозиторий : используется для размещения определенных объектов в некотором постоянном месте, чтобы вы могли получить их позже. Это действительно все.

ASP.NET MVC : обработчик HTTP, который берет запрошенный URL-адрес и создает экземпляр класса controller , который, в свою очередь, обслуживает просмотров . Представления отображают некоторые модели , и поскольку представления являются интерактивными, они позволяют пользователю отправлять еще один запрос , начиная все заново. Поскольку этот процесс (преднамеренно, но не обязательно) не имеет состояния, требуется какой-то постоянство . Это постоянство может быть файлом на сервере, файловой базой данных или в большинстве случаев реляционной базой данных.

Entity Framework : располагается поверх ADO.NET (среда абстракции реляционной базы данных Microsoft) и позволяет отображать объектов из графической (в памяти) формы в реляционную (в базе данных) и обратно. Идея заключается в том, чтобы позволить разработчику легко отображать объекты в базу данных и из нее. Однако это не простой процесс, и поскольку вы не взаимодействуете напрямую с базой данных (будь то через ADO.NET или нет), есть некоторая внутренняя сложность. Одной из таких сложностей является отображение информации.

Просмотр моделей (просмотр моделей asp.net mvc): позволяет отображать модели в различных формах. Например, у нас может быть таблица «схоластической записи» и таблица «человека», и вместе они могут образовывать «студента». Поскольку нашими объектами являются «ScholasticRecord» и «Person», мы не можем (как) просто отображать информацию в представлении. По этой причине мы создаем модель представления для объединения и отображения информации как «Студент».

View Models также предотвращает случайный вызов «ленивых» методов для наших сущностей во время просмотра, которые могут запрашивать базу данных. Это не плохо , но это может сбить с толку, потому что наш view выполняет работу с репозиторием (что не очень [S] OLID) .

TLDR;

Причина, по которой у вас возникли проблемы, , вероятно, , потому что вы пытаетесь сделать все сразу. Я бы предложил использовать инструменты, которые вы знаете, в дополнение к одному или двум, которые вы не знаете. Попробуйте использовать Entity Framework и ASP.NET MVC вместе, но пока не беспокойтесь о шаблоне репозитория. Может быть трудно использовать EF с репозиторием, если у вас нет большого опыта работы с одним или обоими.

Обучающие программы ASP.NET MVC с Entity Framework:

http://www.asp.net/mvc/tutorials/mvc-music-store

(обратите внимание, что иногда они используют модели непосредственно в представлении)

3 голосов
/ 22 декабря 2011

Дело в том, что я не понимаю, почему мне нужно использовать репозиторий

MVC поможет вам написать код с четким разделением задач. В этом случае репозиторий предназначен для взаимодействия приложения с хранилищем данных для конкретной сущности. Если вы хотите Student сущность, вы звоните StudentRepository.GetEntity(). Если вы хотите сохранить, чтобы сохранить, вы звоните StudentRepository.SaveEntity(Student student).

Почему я должен отображать свои объекты и объекты ViewModel. Каждый раз, когда я ищу, почему мне нужно отобразить, я получаю несколько ссылок, в которых говорится, как использовать automapper, и чем больше я ищу в репозитории, тем больше я теряюсь.

Хотя вы можете использовать эти объекты непосредственно в своем представлении для простых случаев, проблема возникает, когда у вас есть более сложные представления - составные представления, которые могут нуждаться в нескольких сущностях, представления, которые должны представлять только подмножество объектов или даже подмножество нескольких объектов. Так что да, вы можете просто выставить свою сущность напрямую, но мне проще просто создать отдельную модель представления.

Automapper используется для отображения карты от модели к объекту. Таким образом, вместо того, чтобы писать много

entity.Name = viewModel.Name;
entity.Age = viewModel.Age;
...

Automapper используется для автоматического сопоставления этих свойств.

А теперь еще одна вещь, которую я неоднократно спрашиваю про себя, - почему я должен снова написать аннотацию данных в классе Viewmodel, когда у меня уже есть аннотированные данные в моем файле designer.cs (например, [Обязательно], [Email] и другие аннотации) ..?

Вы должны указать логику проверки, специфичную для каждого представления в модели представления, чтобы в случае сбоя проверки на контроллере она могла остановить обработку вместо продолжения. Хотя сопоставление вашей модели представления с сущностью и попытка сохранения будут предотвращены аннотацией данных сущностей, я считаю более понятным взглянуть на представление и его модель представления, чтобы понять, что происходит, вместо перехода от представления к представлению модели к объекту .

Обновление:

Взгляните на Шаблоны моделей ASP.NET MVC View и Как мы делаем MVC - Просмотр моделей . Я нашел их обоих полезными при попытке понять модели представления.

...