MVVM方法,ViewModel属性与模型属性



当前正在从事脱机Xamarin Sale的武力应用程序,我有一个有关MVVM架构的问题:我的应用程序当前有4个共享解决方案:摘要,核心,DAL和UI(以及课程,平台/iOS和平台/机器人)。每个解决方案都是非常不言自明的 - 摘要保存着界面,核心包含所有业务逻辑(事件,模型,ViewModel等),DAL所有DB实体(由于我正在使用Realm,我不使用存储库,只是每个vm中的普通领域实例),最后是ui,ui,嗯,所有ui(duh)。

好吧,回到问题...

订单:realmobject->当加载订单视图模型时,它将调用_realm.m.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(甚至是列表)_ orderDetails,并且当它更新时,它还应该在totalPrice上提高属性,在模型上可以正确完成吗?

第一个更适合MVVM,因为该模型不应该执行任何逻辑。您是正确的,OrderModel不应具有属性汇编方法 - 在视图模型中。该模型实际上只能具有属性和构造函数。任何进一步的逻辑,例如属性换的,都将在访问模型

的视图模型中

最新更新