记录为对象提供不可变性,构建器模式也是如此。
使用记录代替建造者的利弊是什么?
发布于 2021-08-19 02:16:19
是Java16中的记录特性,是构建器类的替代品吗?
基本上..。不不是。
记录为对象提供了不可变性,构建器模式也是如此。
这不对。生成器模式既可以应用于不可变对象,也可以应用于可变对象。它实际上是关于对象是如何创建的,而不是对象本身的性质。
使用记录代替构建器的利弊是什么?
简单地说,你不能用记录来代替建造者模式.因为他们所做的事情(事实上,正交的)是不同的。下面是用构建器模式实现的传统Java类与record类型的逐点比较:
created
build()中验证参数-是的.在constructors中
extends:中的default方法
no
少样本代码: records).
)
“较少的样板”问题是微妙的。一方面,构建器避免了对具有大量参数的重载构造函数或new调用的需求。(但你需要实现建筑商本身.主要是样板。)另一方面,record可以在没有任何显式方法和没有主体的简单记录构造函数的情况下实现。
发布于 2021-08-19 01:12:42
JDK增强建议将记录描述为“充当不可变数据透明载体的类”。
用例:
减少了样板代码:从历史上看,在中创建不可变的对象是相当痛苦的工作,记录为我们处理几乎所有的工作。通过减少样板代码,记录还允许类更好地关注手头的业务问题。这使得它成为实现DDD样式的值对象和域事件之类的一个引人注目的特性。
public record Address(String street, String postCode, String town, String country) {
}临时数据容器:记录不仅可以定义为独立类,还可以定义为方法中的本地类。这使得它们在数据处理过程中作为临时容器非常有用,可以在测试中快速创建临时模拟数据,我们将在下面看到一个示例。
数据验证:记录为不同的验证提供支持。它减少了开发人员编写此类验证的责任。
@NonNull -> a field can not be null.
@Min() -> a min value that a field can hold.
@Max() -> a max value that a field can hold.
@GreaterThanZero -> a field can not have value less than or equal to zero.与Builder类的比较:记录类比构建器类提供的唯一优势是数据验证。
https://stackoverflow.com/questions/68840772
复制相似问题