Нужен голос эксперта для начинающего MVC о контроллере и модели - PullRequest
0 голосов
/ 25 июня 2011

Я новичок в MVC.У меня есть следующие вопросы, пожалуйста, помогите мне прояснить эти вопросы, большое спасибо.

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

Q2.Мы используем linq2sql в качестве уровня доступа к данным. Должен ли я использовать табличную сущность в моей модели представления вместо создания отдельного класса модели?Эксперт сказал, что это плохо, но если создать отдельный класс модели, я в основном повторяю их, и мне также нужно копировать это значение в сущность linq 2sql каждый раз, когда я хочу сохранить данные, это не так весело, слишком много работы.

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Многие люди предлагают держать контроллер маленьким и худым.

Да.Люди имеют в виду, что контроллер не должен содержать никакой логики, кроме отображения модели <->.Под моделью я подразумеваю « M » в MVC.

Q2.Мы используем linq2sql в качестве уровня доступа к данным. Должен ли я использовать табличную сущность в моей модели представления вместо создания отдельного класса модели?Эксперт сказал, что это плохо, но если создать отдельный класс модели, я в основном повторяю их, и мне также нужно копировать это значение в сущность linq 2sql каждый раз, когда я хочу сохранить данные, это не так весело, слишком много работы.

Нет.Вы не должны.Прочитайте мой ответ здесь: ASP.NET MVC Где разместить настраиваемые атрибуты проверки

Использовать структуру сопоставления для модели -> преобразование модели представления.

Обновление:

Из того, что я понимаю, вы предлагаете собрать viewmodel внутри контроллера (я имею в виду вызов бизнес-уровня или репозитория для получения моих данных) и использовать контроллер для вызова бизнес-логики, имеющей дело сданные, я прав?

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

Контроллер был создан именно для этой цели.Создать абстракцию между уровнем пользовательского интерфейса и нижними уровнями.Следовательно, единственный код, который должен существовать в контроллере, состоит в том, чтобы сделать это возможным (и, следовательно, следуя принципу единой ответственности)

Если вы начнете добавлять эту логику в свои модели представлений, вы начнете добавлять связь между нижними уровнями иуровень пользовательского интерфейса.Поэтому внесение любых изменений в нижние уровни также повлияет на все модели представлений (вместо контроллера

).
0 голосов
/ 25 июня 2011

ваша view-модель должна быть poco, и, безусловно, не должна обрабатывать отображение модели.если вы не хотите отображать вашу модель в вашей модели представления в контроллере, я бы посоветовал вам взглянуть на что-то вроде automapper .это упрощает процесс.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...