我有以下域实体:
public class CartItem
{
public virtual Guid Id { get; set; }
public virtual Guid SessionId { get; set; }
public virtual int Quantity { get; set; }
public virtual Product Product { get; set; }
}
我有以下 DTO:
public class CartItemDTO
{
public CartItemDTO(CartItem cartItem)
{
Id = cartItem.Id;
Quantity = cartItem.Quantity;
Name = cartItem.Product.Name;
Price = cartItem.Product.Price;
}
public Guid Id { get; private set; }
public int Quantity { get; private set; }
public string Name { get; private set; }
public decimal Price { get; private set; }
}
当前的工作流程非常简单:我的存储库返回一个 CartItem 类型的 IEnumerable。我的服务将其转换为 dto (CartItemDTO)。然后我的控制器将其传递给视图。到目前为止,一切都很好。
现在我想为每个行项目实施总计。我将以下属性添加到 CartItemDTO。
public decimal Total { get; private set; }
然后,我将以下代码添加到 CartItemDTO 构造函数。
Total = cartItem.Quantity * cartItem.Product.Price;
我的第一个问题是这是否是最佳实践方法?如果不是,为什么?我应该在其他地方添加 Total 属性吗?如果是这样,为什么?
我还想为整个购物车实现总计,因此我创建了一个新类(如下)并修改了我的服务以返回它。
public class CartItemResult
{
public CartItemResult(IEnumerable<CartItemDTO> result)
{
CartItems = new List<CartItemDTO>(result);
Total = result.Sum(total => total.Total);
}
public IList<CartItemDTO> CartItems { get; private set; }
public decimal Total { get; private set; }
}
我现在可以将新类传递给视图,或者创建一个单独的 ViewModel 并将新类的内容传递给 ViewModel 并将其传递给视图。
我的第二个问题是,这种方法是否是最佳实践方法?如果不是,为什么以及我应该做些什么不同的事情?