当前正在处理Xamarin脱机优先的强制应用程序,我对MVVM体系结构有一个疑问:我的应用程序目前有4种共享解决方案:抽象,核心,DAL和UI(当然还有Platform / iOS和Platform / Droid)。每个解决方案都是不言自明的-抽象包含接口,Core包含所有业务逻辑(事件,模型,ViewModel等),DAL所有DB实体(因为我正在使用Realm,因此我不使用存储库) ,只是每个VM中的普通领域实例),最后是拥有所有UI(duh)的UI。
好吧,回到问题上来……顺带说一句,我说这个:
Order: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);
}
}
乍一看,这听起来可能是一个愚蠢的问题,但我主要担心的是:我应该从模型中提出propertyChanges吗?不会伤害POCO原则吗?例如,如果OrderModel包含一个ObservableCollection(甚至是一个List)_orderDetails,并且在更新时还应该在TotalPrice上引发一个PropertyChanged,是否可以在Model上完成?
答案 0 :(得分:1)
第一个更适合MVVM,因为该模型不应执行任何逻辑。您正确的是,OrderModel不应具有propertyChanges方法,该方法应位于视图模型中。该模型实际上应该只具有属性和构造函数。任何进一步的逻辑,例如propertyChanged,都将在访问模型的视图模型中