gpt4 book ai didi

c# - 在实例化时启动大量属性是一种好做法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:21 25 4
gpt4 key购买 nike

我有一个 Cart 类,它有很多属性:

public class Cart
{
public Customer Customer { get; set; }
public Products Products { get; set; }
public Payments Payments { get; set; }
public DateTime TimeOfArrival { get; set; }
//...and so on
}

每当我想实例化一个新的Cart 时,我都需要启动这些属性。其中一些是已知的(例如客户),其他的还不知道(例如产品和付款)。所以当我实例化一张新票时,这就是我最终这样做的:

Cart Cart = new Cart
{
// for know properties:
Customer = currentCustomer,
TimeOfArrival = DateTime.Now,

// for properties that are going to be filled later:
Products = new List<Product>(),
Payments = new List<Payment>(),

// ...and so on
};

这个解决方案显然有效,但在实例化时看起来非常笨重,而且在启动器中完成了很多工作,我认为这是一件坏事。

我这样做是否正确,或者在实例化时启动大量属性不是一个好的做法?如果是这样,我应该怎么做?

提前致谢

最佳答案

是的,还有改进的余地。但是要小心,很大程度上取决于要求,基本上在很多情况下他们应该领先。这是一个品味问题。有些人比其他人更纯粹。

这取决于您的项目:它有多重要?这是一个副项目还是您的核心业务?

而且,是的,还有改进的余地;总是...现在,明年,在每次审查...等等。只是说:没有完美的设计。


现在,我有强烈的偏见:)

您的设置代表领域驱动设计中的典型案例。我稍后会发送链接。

一般来说,在领域驱动设计中,您会尝试确定特定的业务功能/概念,并将其包装在其中,最好是最具描述性的对象。基本上,您的购物车走在正确的轨道上。

但是,购物车似乎包含了很多领域知识。

特别是嵌套的复杂类型可能表明您正在跨越某些域边界。

例如:客户;它位于购物车内。客户可能又包含一个地址。 ...等等。

显然一个人的地址与购物车本身无关。

还有;支付。我不认为它通常绑定(bind)到购物车,可能更绑定(bind)到订单。

至于产品;简短的描述和实际产品的链接就足够了。在明显的价格和数量旁边。

对于购物车,您可能需要考虑仅存储客户 ID,并在需要其他数据时获取客户。

总之,总的来说,这是一个though subject。最好的建议是;不要试图涉及太多复杂的类型,并且只在你的模型中放入只对特定“事物”有意义的事物

关于c# - 在实例化时启动大量属性是一种好做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996244/

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