2017-02-22 14 views
0

Я пытаюсь внедрить систему корзины покупок в моем приложении, которая оказалась более запутанной/сложной, чем я ожидал.Является одной из торговых точек - модели или модели?

В настоящее время моя реализация выглядит следующим образом:

public class CartItem 
{ 
    public Product Product { get; set; } 
    public int Quantity { get; set; } 
    public decimal Subtotal { get { return Quantity * Product.Price; } } 
} 

public class Cart 
{ 
    public ObservableCollection<CartItem> CartItems { get; set; } 
    public int ItemCount { get; set; } 
    public decimal Total { get; set; } 
    public ICommand AddItemCommand { get; set; } 
    public ICommand RemoveItemCommand { get; set; } 
    public void AddItem(Product product) 
    { 
    } 
    public void RemoveItem(Product product) 
    { 
    } 
} 

В частности, я с трудом пытаясь выяснить, где он находится в паттерне MVVM. Эта реализация работает до тех пор, пока переменная Quantity на CartItem не будет изменена чем-либо, кроме Cart (например, видом), к которому принадлежит.

Некоторые вопросы я задавал себе вопрос:

  • Есть корзина абстракция объекта? Да => Это модель.
  • Будет ли он сериализован/десериализован в базу данных и из нее? Да, это еще модель.
  • Он служит для представления данных? Да. Это модель взгляда.
  • Действует ли оно или изменяет эти данные? Да, так что это viewmodel.
+1

** CartItem ** определенно модель. ** Корзина ** является скорее контроллером, который View свяжет так, чтобы он помещался в ViewModel –

+0

Итак, ваш фактический вопрос «Как обновить' Cart.ItemCount' и 'Cart.Total' на ** view * *, когда 'CartItem.Quantity' изменяется на одном из' CartItem', хранящихся в коллекции 'Cart.CartItems'? или «Какая часть шаблона MVVM, который эти классы в настоящее время представляют: Model, ViewModel или View?» – Teknikaali

+0

Да. Я имею ввиду нет. Определенно лет. Возможно, нет. Может быть. – Will

ответ

0

То, что я собираюсь сказать, это то, как я вижу MVVM, поэтому, возможно, это не совсем точно, но я видел, как другие думают одинаково.

На мой взгляд, и Cart, и CartItem являются Model.

Когда я строю MVVM приложения у меня есть:

  1. Вид: Только XAML, без кода За
  2. ViewModel: который содержит один или несколько объектов модели и некоторые другие свойства
  3. Модель: Кажется, что это модель DTO, и все свойства реализуют INotifyPropertyChanged (или RaisePropertieChanged, если вы используете MVVM-Light P Лугин).

    Модель может иметь некоторые «свойства помощника». Например, ваше «итоговое» свойство.

  4. DomainModel: каковы ваши данные из вашей базы данных. В основном ваша DomainModel имеет ту же структуру вашей таблицы (более или менее)

Очевидно, что есть также уровень обслуживания, но это не главное.

Чтобы сопоставить модель с DomainModel, я использую Automapper. Это довольно просто.

Вы можете объединить слой Model и DomainModel, но personnaly Мне это не нравится. И все же я использую библиотеку PocoGenerator, поэтому код MVVM будет удален каждый раз, когда я обновляю структуру моей базы данных.

Последнее, что я нашел, используя MVVM-Light было очень полезно. Но, опять же, это просто мое мнение.

EDIT:

Я забыл: Я думаю, что ICommand и метод не должен быть там. Вся ICommand должна быть помещена в класс ViewModel.

Смежные вопросы