Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用生成器构建对象_C#_Design Patterns_Constructor_Builder_Fluent Interface - Fatal编程技术网

C#使用生成器构建对象

C#使用生成器构建对象,c#,design-patterns,constructor,builder,fluent-interface,C#,Design Patterns,Constructor,Builder,Fluent Interface,是一种众所周知的模式,用于构建具有许多属性的对象: Team team = teamBuilder.CreateTeam("Chelsea") .WithNickName("The blues") .WithShirtColor(Color.Blue) .FromTown("London") .PlayingAt("Stamford Bridge"); 然而,由于一个特殊的原因,使用

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

Team team = teamBuilder.CreateTeam("Chelsea")
    .WithNickName("The blues")
    .WithShirtColor(Color.Blue)
    .FromTown("London")
    .PlayingAt("Stamford Bridge");
然而,由于一个特殊的原因,使用它对我来说似乎不是很清楚:

  • 每个
    团队
    对象都有其最小操作状态,换句话说,必须设置一组属性(强制),以便对象可以使用
现在,考虑到您必须保持这种状态,应该如何使用
Fluent builder
方法

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

这种情况可能有一些一般规则?


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

  • 如果我(例如)省略带有昵称的
    调用,会发生什么

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

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

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

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

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

在我看来,流畅界面的要点是:

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

因此,经验法则是,我应该避免让对象处于不一致的状态?是的-一旦它被构造,它应该是有效的。我想说,这个答案忽略了流畅界面的要点[enter link description here][1][1]:@radarbob这怎么会忽略要点?据我所知,您提供的wikipedia链接与上述内容并不矛盾。@David-我只是在创建方法中采用了零参数的纯粹观点。我明白了确保最小对象创建的强制参数的意义。昵称,强制?如果是这样,它应该是CreateTeam(字符串昵称)方法中的一个参数。WithNickname()是一个可选调用,您可以在创建团队后使用它来修改团队。fluent方法始终用于可选参数,而不是强制参数。@MichaelS.Scherotter好的,非常感谢。