Должна ли модель или ViewModel обрабатывать ленивую загрузку свойств модели? - PullRequest
4 голосов
/ 11 февраля 2011

Допустим, у меня есть ConsumerModel. ConsumerModel имеет много свойств модели, и один из них представляет собой список AddressModel. Я хочу, чтобы это свойство Address загружалось лениво, потому что оно не используется везде, где используется ConsumerModel. Он используется только в AddressViewModel, который отображает и разрешает изменение адресов потребителя.

Кто позаботится о загрузке AddressModels, ConsumerModel или AddressViewModel?

Или для этого типа вещей предлагается альтернативный вариант, например, отсоединение списка адресов от потребителя и обработка их как отдельного свойства внутри AddressViewModel?

public class ConsumerModel : IModel
{
    private List<AddressModel> _addresses;

    public List<AddressModel> Addresses
    {
        get;
        set;
    }
}

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

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

1 голос
/ 11 февраля 2011

Если свойство Addresses принадлежит ConsumerModel, то ConsumerModel должен отвечать за его загрузку. (Что-то еще нарушает инкапсуляцию / какой-то принцип дизайна - я не в своей терминологии ... это просто неправильно, черт возьми!)

Однако, если список адресов используется только в AddressViewModel, возможно, есть причина для перемещения свойства в эту ViewModel и его обработки загрузкой.

...