gpt4 book ai didi

c# - asp.net MVC 应用程序中的 POCO 格式

转载 作者:行者123 更新时间:2023-11-30 19:51:18 25 4
gpt4 key购买 nike

我正在创建一个简单的 aspnetmvc 购物车应用程序并定义了类似于以下的类:

public class Cart
{
public Guid Id { get; set; }
public string Comment { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
public DateTime? DeletedOn { get; set; }
public List<CartItem> CartItems { get; set; }
}

public class CartItem
{
public Guid Id { get; set; }
public Guid CartId { get; set; }
public string Sku { get; set; }
public double ItemAmount { get; set; }
public double Amount { get; set; }
public int Quantity { get; set; }
}

使用一个非常简单的存储库,看起来像这样:

public interface ICartRepository
{
Cart CreateCart();
Cart GetCart(Guid Id);
Cart UpdateCart(Cart cart);
void DeleteCart(Cart cart);
}

创建类后,我开始觉得我更适合从 Cart 类中分离出 List 属性,然后在我的 View 模型中重新组合它们。

public class vmCart
{
public Cart cart { get; set; }
public List<CartItem> CartItems { get; set; }
public string CreatedOn
{
get
{
return cart.CreatedOn.ToString();
}
}
public string CartTotal
{
get
{
var total = (double)0;
foreach (var lineItem in CartItems)
{
total += lineItem.Amount;
}
return total.ToString("c");
}
}
}

这意味着我必须为 CartItems 的 CRUD 模型添加额外的方法,但仍然允许我将对象作为组合实体呈现给 View (通过 View 模型)。

这两种格式可能都没有明显的优势,但我希望收到有关设计的任何反馈。

最好的问候,

哈尔

最佳答案

就我个人而言,我会将 CartItems 保留在购物车中。原因如下:

  1. 有一个明显的“有”关系表明购物车中有 CartItems。

  2. 购物车是您领域模型中的明确聚合。您不太可能在不加载购物车项目的情况下加载购物车实体。虽然这会使您的存储库中的 CRUD 操作变得有点复杂,但任何存储库使用者执行 UpdateCart() 而不是执行自己的迭代并执行 UpdateCartItem() 是预期的行为。

  3. 将它分解成另一个对象会增加没有明确目的的复杂性

  4. 以任何一种方式将项目放入您的 View 都一样容易。

如果您的域模型或您处理购物车商品的方式发生任何变化,这些假设可能会发生变化,因此您采用的方法也会发生变化。但这就是我目前的看法。

关于c# - asp.net MVC 应用程序中的 POCO 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1323678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com