3
我正在使用DDD體系結構的解決方案。我在我的ViewModel中有一個屬性指向一個ValueObject,視圖模型也實現了INotifyPropertyChanged接口。當用戶在前端輸入數據時,ValueObject的值將會改變。我遇到的問題是值對象被認爲是不可變的。我該如何解決這個問題?先謝謝你。值對象和視圖模型屬性
我正在使用DDD體系結構的解決方案。我在我的ViewModel中有一個屬性指向一個ValueObject,視圖模型也實現了INotifyPropertyChanged接口。當用戶在前端輸入數據時,ValueObject的值將會改變。我遇到的問題是值對象被認爲是不可變的。我該如何解決這個問題?先謝謝你。值對象和視圖模型屬性
如果您可以編輯某些東西,那麼必須有一個可變的容器作爲不可變的值。因此,你的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; }
}
我省略了錯誤處理和變更通知在這裏,但希望你的想法。
此外,請注意,此示例與FirstName
和LastName
的Customer
類的典型示例並沒有什麼不同。字符串也是不可變的,所以我們再次有一個可變的容器,用於不可變的值。
我正在考慮與您在此處指定的解決方案相同的路徑,但不幸的後果是它會在您的DDD模型上爲此值對象設置一個通用容器,否則必須爲每個對象創建一個新的ViewModel希望允許編輯相同值對象的容器。也許有一種方法可以將容器本身保留在ViewModel中,而不會使事情過於複雜...... – jpierson