带有生成器的C#构造对象

本文关键字:对象 | 更新日期: 2023-09-27 18:21:16

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

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

然而,由于一个特殊的原因,我似乎不太清楚使用它:

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

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

With_XYZ成员是否应该修改对象中不会影响此状态的部分?

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


更新:

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

  • 如果我(例如)省略了WithNickName调用,会发生什么?

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

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

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

带有生成器的C#构造对象

CreateTeam()应具有作为参数的强制属性。

Team CreateTeam(string name, Color shirtColor, string Town)
{
}

在我看来Fluent接口的要点是:

  • 将构造函数中的参数数量减至零,同时在创建时仍动态初始化某些属性
  • 使属性/参数值的关联非常清晰-在一个大型参数列表中,什么值代表什么?如果不进一步挖掘就无法判断
  • 实例化的编码风格非常干净、可读,并且可编辑。使用此格式样式添加或删除属性设置不太容易出错。即删除整行,而不是在一个长参数列表的中间进行编辑;更不用说编辑错误的参数了