MVVM方法,ViewModel属性与Model属性

问题描述 投票:0回答:1

目前正在开发一个离线优先的Xamarin销售部队应用程序,我有一个关于MVVM架构的问题:我的应用程序目前有4个共享解决方案:抽象,核心,DAL和UI(当然还有Platform / iOS和Platform / Droid)。每个解决方案都是不言自明的 - 抽象包含接口,Core包含所有业务逻辑(事件,模型,ViewModel等),DAL所有数据库实体(因为我正在使用Realm,我没有使用存储库,只是每个VM中的普通领域实例),最后是UI,其中包含所有UI(duh)。

那么,回到这个问题......当然,让我说我有这个:

顺序:RealmObject - >加载OrderViewModel时,它调用_realm.All并订阅通知。然后,每个RealmObject在OrderModel中转换并加载到ObservableCollection AllProducts中。这非常有效。

现在,在我的AddOrderPage中,我有一个包含订单基本数据的表单。问题是:我的AddOrderPageViewModel本身应该具有每个OrderModel属性还是应该只使用OrderModel属性?基本上,这个:

public class OrderViewModel {

    OrderModel _order;

    public OrderModel Order {
        get => _order;
        set {
            _order = value;
            RaisePropertyChanged(nameof(Order));
        }
    }

    public SaveOrder()
    {
        // do validation
        _realm.Save(_order);
    }
}

要么:

public class OrderViewModel {

    decimal _amount;

    public decimal Amount (...)

    decimal _price;

    public decimal Price (...)

    (...)

    public SaveOrder()
    {
        var order = new Order { ..., _amount, _price);
        // do validation
        _realm.Save(order);
    }
}

这听起来可能是一个愚蠢的问题,但我主要担心的是:我应该从模型中提出属性变化吗?它不会伤害POCO原则吗?例如,如果OrderModel包含ObservableCollection(甚至是List)_orderDetails,并且在更新时,它还应该在TotalPrice上引发propertyChanged,在Model上完成是否正确?

model architecture viewmodel
1个回答
1
投票

第一个更适合MVVM,因为模型不应该做任何逻辑。你是正确的,OrderModel不应该有propertyChanges方法 - 它将在视图模型中。该模型应该只具有属性和构造函数。任何进一步的逻辑,如propertyChanged将在访问模型的视图模型中

© www.soinside.com 2019 - 2024. All rights reserved.