Значение объекта и представление свойства модели - PullRequest
3 голосов
/ 22 марта 2010

Я работаю над решением, которое использует DDD для архитектуры. У меня есть свойство в ViewModel, которое указывает на ValueObject, модель представления также реализует интерфейс INotifyPropertyChanged. Значение ValueObject будет меняться, когда пользователь вводит данные в интерфейс. Проблема, с которой я сталкиваюсь, заключается в том, что объект значения должен быть неизменным. Как я могу обойти эту проблему? Заранее спасибо.

1 Ответ

2 голосов
/ 22 марта 2010

Если вы можете что-то редактировать, то для неизменяемого значения должен быть изменяемый контейнер. Следовательно, ваша view-модель должна действовать непосредственно на изменяемый контейнер, а не на неизменяемое значение.

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

public MutableIntegerViewModel
{
    private readonly mutableInteger;

    public MutableIntegerViewModel(MutableInteger mutableInteger)
    {
        this.mutableInteger = mutableInteger;
    }

    public string DisplayText
    {
        get
        {
            return this.mutableInteger.Value.ToString(
                CultureInfo.CurrentCulture);
        }
        set
        {
           this.mutableInteger.Value = 
               Int32.Parse(value, CultureInfo.CurrentCulture);
        }
    }
}

Где MutableInteger это просто:

public class MutableInteger
{
   public int Value { get; set; }
}

Я пропустил обработку ошибок и уведомление об изменении здесь, но, надеюсь, вы поняли идею.

Также обратите внимание, что этот пример на самом деле не отличается от типичного примера класса Customer с FirstName и LastName. Строки также являются неизменяемыми, поэтому у нас снова есть изменяемый контейнер для неизменяемых значений.

...