带有生成器的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
?这是否意味着这个例子(请参阅链接)不好,因为对象可能处于无效状态?
而且,好吧,我怀疑在这种情况下,流畅的构建方法实际上失去了它的";"美丽";,不是吗
CreateTeam()
应具有作为参数的强制属性。
Team CreateTeam(string name, Color shirtColor, string Town)
{
}
在我看来Fluent接口的要点是:
- 将构造函数中的参数数量减至零,同时在创建时仍动态初始化某些属性
- 使属性/参数值的关联非常清晰-在一个大型参数列表中,什么值代表什么?如果不进一步挖掘就无法判断
- 实例化的编码风格非常干净、可读,并且可编辑。使用此格式样式添加或删除属性设置不太容易出错。即删除整行,而不是在一个长参数列表的中间进行编辑;更不用说编辑错误的参数了