Подход MVVM, свойства ViewModel и свойства модели - PullRequest
0 голосов
/ 25 февраля 2019

В настоящее время я работаю над первым приложением 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?

1 Ответ

0 голосов
/ 25 февраля 2019

первый больше подходит для MVVM, так как модель не должна делать никакой логики.Вы правы, что в OrderModel не должно быть метода propertyChanges - это было бы в модели представления.Модель должна действительно иметь только свойства и конструктор.Любая дальнейшая логика, например, propertyChanged, будет в модели представления, которая обращается к модели

...