Какова роль модели в MVC? - PullRequest
       3

Какова роль модели в MVC?

5 голосов
/ 07 декабря 2011

Я прочитал несколько статей о MVC, но есть одна вещь, которая мне не ясна. Какова роль модели в практическом плане.

Представляет ли модель бизнес-объект? Или это просто класс, который помогает отправлять информацию из контроллера в представление?

Возьмем, к примеру, два бизнес-класса (данные заполняются из базы данных)

Class Image
    Property FileName As String
    Property CreatedBy As User
End Class

Class User
    Property UserName as String
End Class

Будет ли «Образ» моделью или мне следует создать новый класс?

В модели я должен создать свойство UserName, которое будет извлекать его данные из объекта User?

Class ImageModel
    Property FileName As String
    Property CreatedBy As User

    ReadOnly Property UserName As String
        Get
            Return User.UserName
        End Get
    End Property
End Class

Ответы [ 2 ]

10 голосов
/ 07 декабря 2011

Существует много представлений об этом, но, по моему опыту, есть 2 основных представления Model:

ViewModel

Это POCO, который просто содержит все необходимые данныедля отображения View.Данные обычно заполняются Controller.

Fat Model, Skinny Controller

Model выполняет большую часть бизнес-работы.Он содержит и заполняет все данные, необходимые для View, и используется Controller для сохранения данных и т. Д.

Красота MVC

Красота MVCэто то, что он открыт!Вы можете выбрать любой тип модели, который вам нужен ... вы можете поместить все свои данные в ViewState, в Model, в ViewModel, который содержит набор Model s, что угодно.Это действительно зависит от вас.Модель, Вид и Контроллер - это пустые холсты, которые можно использовать по своему усмотрению.

Что я использую

Моя команда проделала большую работу по MVC, и мы попробовали многие из нихразные методы.Мы, наконец, решили, что нашим фаворитом была парадигма Fat Model, Skinny Controller .
Я считаю, что этот паттерн лучше всего подходит для "простоты" и "не повторяйся", и это определенноподдерживает «разделение интересов».
Вот как организован наш код:

  • Контроллеры
    • Обрабатывает все, что относится к HTTP-запросам - перенаправления, аутентификация, веб-безопасность, кодированиеи т. д.
    • Предоставляет все "входные данные" для Model и дает Model для представления.НЕ получает доступ к бизнес-уровням или слоям данных.
  • Представления
    • Обрабатывает все поколения HTML и JSON
    • Доступ только к данным со строго типизированным Model
  • Модели
    • Отвечает за выполнение всех обновлений, вызов бизнес-уровней и слоев данных, загрузку всех данных
    • Обрабатывает все проверки и ошибки и возвращает ихКонтроллер
    • Содержит свойства всех данных, которые требуются для View, и заполняет себя

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

Пример

Вот пример Model.Контроллер создает его, он сам заполняет, и Контроллер передает его в представление.

public class UsersModel
{
    protected UserBusiness userBusiness = new UserBusiness();

    public UsersModel(string editUserName)
    {
        // Load all users:
        this.Users = userBusiness.GetAllUsers();

        // Load the user to be edited:
        this.EditUser = (editUserName == null) ? null : userBusiness.GetUser(editUserName);
    }

    public List<User> Users { get; private set;}
    public User EditUser { get; private set; }
}

Вся «пользовательская бизнес-логика» в этом случае находится в другом проекте (наш «Бизнес-уровень»), потому что у нас большая система.Но для небольших проектов этого не требуется ... Модель может содержать бизнес-логику и даже код доступа к данным.

1 голос
/ 07 декабря 2011

Есть много моделей. Это могут быть как объекты бизнес-данных (или домена) (Controller-> Datasource и наоборот), так и бизнес-правила (действуют на объекты домена) или модели представления (Controller to View и наоборот).

Вам не нужно явно определять имя пользователя снова в ImageModel.

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