带构建器的C#构造对象

Yip*_*Yay 4 c# constructor design-patterns fluent-interface builder

Fluent构建器是一种众所周知的模式,用于构建具有许多属性的对象:

Team team = teamBuilder.CreateTeam("Chelsea")
    .WithNickName("The blues")
    .WithShirtColor(Color.Blue)
    .FromTown("London")
    .PlayingAt("Stamford Bridge");
Run Code Online (Sandbox Code Playgroud)

但是,由于一个特殊原因,使用它对我来说似乎不太清楚:

  • 每个Team对象都有其最小的操作状态,换句话说,必须设置的属性集(必需),以便对象可以使用.

现在,Fluent builder考虑到你必须保持这种状态,应该如何使用这种方法?

With_XYZ成员是否应该修改对象的一部分,这不会影响这种状态?

也许这种情况有一些一般规则?


更新:

如果该CreateTeam方法应该将强制属性作为参数,接下来会发生什么?

  • 如果我(例如)省略WithNickName呼叫会怎样?

  • 这是否意味着昵称应该默认为某些DefaultNickname

  • 这是否意味着该示例(请参阅链接)不好,因为该对象可能处于无效状态?

  • 而且,我怀疑在这种情况下,流畅的建筑方法实际上失去了它的"美丽",不是吗?

Mic*_*ter 8

CreateTeam() 应具有必需的属性作为参数.

Team CreateTeam(string name, Color shirtColor, string Town)
{
}
Run Code Online (Sandbox Code Playgroud)

  • 是的 - 一旦它被构建,它应该是有效的. (2认同)