当前正在从事脱机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不应具有属性汇编方法 - 在视图模型中。该模型实际上只能具有属性和构造函数。任何进一步的逻辑,例如属性换的,都将在访问模型