【发布时间】:2023-03-20 21:35:01
【问题描述】:
您好,我遇到了一个问题。
我想实现构建器模式以更轻松地创建我的对象。我面临的问题与嵌套对象有关。我想创建的对象中包含其他对象的列表,我真的不知道如何处理它。
我希望能够执行以下操作(例如更简单的对象):
Receipt RestaurantReceipt = new ReceiptBuilder()
.withDate("value")
.withName("value")
.AddItem("value")
.WithIngredients("value")
.WithType("value")
.AddItem("value")
.WithIngredients("value")
.WithType("value")
.build();
或者类似的东西:
Receipt RestaurantReceipt = new ReceiptBuilder()
.withDate("value")
.withName("value")
.AddItem("value", item => {
.WithIngredients("value")
.WithType("value")
})
.AddItem("value", item => {
.WithIngredients("value")
.WithType("value")
})
.build();
示例应该能代表我的情况,尽管如果有不止一种类型的嵌套对象。
【问题讨论】:
-
ReceiptBuilder的当前代码是什么样的?您尝试使用AddItem添加的项目的结构是什么? -
一般技巧是不将实例本身作为这些操作的返回值返回吗?那么为什么不 `` ... .AddFoo(new Foo().WithIngredient("value").WithType("value"))。 ……``?只需重复这些子类型的模式并使用子集合特定的添加功能/属性。
-
看看
Receipt类会很有帮助 -
拥有一个额外的 Builder 类有什么好处吗?或者这通常只有在
Receipt对象本身没有实现模式时才这样做?不是构建器,而是扩展方法不是更可取的吗?
标签: c# design-patterns fluent method-chaining builder-pattern