我一直在阅读一些博客 文章,支持测试数据生成器模式的优点.这似乎是一个好主意,但所有帖子都已有数年之久.
当C#引入Object Initializes时,是否使测试数据生成器模式过时了?
在Object Initializers之前,您需要以下代码来初始化person对象:
Person p = new Person("John", "Doe", "555-555-1234");
Run Code Online (Sandbox Code Playgroud)
当时,拥有一个构建器会像这样清理代码:
Person person = new PersonBuilder()
.WithFirstName("John")
.WithLastName("Doe")
.WithPhoneNumber("555-555-1234");
Run Code Online (Sandbox Code Playgroud)
现在使用对象初始化器,它可以看起来像这样,而无需编写任何构建器方法:
Person p = new Person() {FirstName="John", LastName="Doe", Phone="555-555-1234"};
Run Code Online (Sandbox Code Playgroud)
在这个简单的例子中,似乎不需要构建器模式.我错过了什么吗?人们还在使用构建器模式吗?如果是这样,有什么好处?
在许多情况下,您可以用对象初始值设定项替换构建器。
然而,在某些情况下,建筑商仍然是一个不错的选择。
不可变对象就是一个例子。例如,Jon Skeets protobuff 实现是现实世界中不可变对象构建器模式的一个很好的例子。(https://codeblog.jonskeet.uk/2008/08/20/lessons-learned-from-protocol-buffers-part-1-messages-builders-and-immutability/)
Person john = new Person.Builder()
.SetFirstName("John")
.SetLastName("Doe")
.Build(); //creates an immutable person
Run Code Online (Sandbox Code Playgroud)
其他情况可能是应用预设值。例如。
Rectangle rect = RectangleBuilder.MakeSquare(10).Build();
Car car = CarBuilder.MakeVolvo().PimpIt().SetColor(Color.Red).Build();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以一次设置多个属性,以便您可以从某种原型开始并从那里继续。
| 归档时间: |
|
| 查看次数: |
3490 次 |
| 最近记录: |