C# 购物车是模型还是视图模型?

C# 购物车是模型还是视图模型?,c#,mvvm,C#,Mvvm,我正在尝试在我的应用程序中实现一个购物车系统,这被证明比我预期的更令人困惑/困难 目前,我的实现如下所示: 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 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)
    {
    }
}
公共类CartItem
{
公共产品产品{get;set;}
公共整数数量{get;set;}
公共小数小计{获取{返回数量*产品.价格;}}
}
公共类购物车
{
公共ObservableCollection CartItems{get;set;}
公共int ItemCount{get;set;}
公共十进制总数{get;set;}
公共ICommand AddItemCommand{get;set;}
public ICommand removietemcommand{get;set;}
公共无效附加项(产品)
{
}
公共无效删除项(产品)
{
}
}
具体来说,我很难找到它在MVVM模式中的位置。此实现将一直工作,直到
购物车项目
上的
数量
变量被它所属的
购物车
以外的内容(例如视图)修改为止

我问了自己一些问题:

  • 购物车是对象的抽象吗?是=>这是一个模型
  • 它将被序列化/反序列化到数据库或从数据库中进行序列化/反序列化吗?是的,所以它还是一个模型
  • 它是否为视图提供数据?对这是一个视图模型
  • 它是否作用于或修改该数据?是的,所以它是一个视图模型

我要说的是我看待MVVM的方式,所以可能它并不完全准确,但我看到其他人也这么认为

在我看来,购物车和购物车都是模型。

当我构建MVVM应用程序时,我有:

  • 查看:只有Xaml,没有代码隐藏

  • 视图模型:包含一个或多个模型对象和一些其他属性

  • 模型:它似乎是一个DTO模型,每个属性都实现INotifyPropertyChanged(或者如果使用MVVM Light插件,则RaisePropertieChanged)

    模型可以有一些“辅助属性”。例如,你的“小计”财产

  • 域模型:这是您数据库中的数据。基本上,DomainModel与表的结构相同(或多或少)

  • 显然还有一个服务层,但这不是重点

    要将模型映射到DomainModel,我使用Automapper。这很简单

    你可以合并模型和域模型层,但我个人不喜欢这样。 不管怎样,我使用一个pogenerator库,这样每当我更新数据库的结构时,MVVM代码都会被删除

    最后一件事,我发现使用MVVM Light非常有用。但是,这只是我的意见

    编辑:

    我忘了:
    我认为ICommand和方法不应该存在。所有ICommand必须放在ViewModel类中。

    CartItem肯定是一个模型。Cart更像是视图绑定到的控制器,因此在ViewModel中,当存储在
    Cart.CartItems
    集合中的一个
    CartItem
    上的
    CartItem.Quantity
    发生更改时,您的实际问题是“如何更新视图中的
    Cart.ItemCount
    Cart.Total
    ”,或者“这些类当前代表MVVM模式的哪一部分:模型、视图模型还是视图?”是的。我的意思是,不。肯定是。可能是nes。可能是。