В настоящее время я работаю над первым приложением Xamarin для продажи в режиме офлайн, у меня есть вопрос, касающийся архитектуры MVVM: в настоящее время у моего приложения есть 4 общих решения: Abstractions, Core, DAL и UI (и, конечно, Platform / iOS и Platform /Droid).Каждое решение не требует пояснений - абстракции содержат интерфейсы, Core содержит всю бизнес-логику (события, модели, ViewModel и т. Д.), DAL - все объекты БД (поскольку я работаю с Realm, я не использую репозиториипросто экземпляр простой области в каждой виртуальной машине) и, наконец, пользовательский интерфейс, который содержит, да, весь пользовательский интерфейс (дух).
Итак, вернемся к вопросу ... в настоящее время, скажем,У меня есть это:
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 и, когда он обновляется, он также должен вызывать propertyChanged для TotalPrice, правильно ли это делать в Model?