2010-03-22 53 views
3

我正在使用DDD體系結構的解決方案。我在我的ViewModel中有一個屬性指向一個ValueObject,視圖模型也實現了INotifyPropertyChanged接口。當用戶在前端輸入數據時,ValueObject的值將會改變。我遇到的問題是值對象被認爲是不可變的。我該如何解決這個問題?先謝謝你。值對象和視圖模型屬性

回答

2

如果您可以編輯某些東西,那麼必須有一個可變的容器作爲不可變的值。因此,你的viewmodel應該直接作用於可變容器而不是直接作用於不可變值。

整數是這種不可變值對象的示例: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; } 
} 

我省略了錯誤處理和變更通知在這裏,但希望你的想法。

此外,請注意,此示例與FirstNameLastNameCustomer類的典型示例並沒有什麼不同。字符串也是不可變的,所以我們再次有一個可變的容器,用於不可變的值。

+0

我正在考慮與您在此處指定的解決方案相同的路徑,但不幸的後果是它會在您的DDD模型上爲此值對象設置一個通用容器,否則必須爲每個對象創建一個新的ViewModel希望允許編輯相同值對象的容器。也許有一種方法可以將容器本身保留在ViewModel中,而不會使事情過於複雜...... – jpierson

相關問題