首页 > 解决方案 > 完整对象图上的 DDD 验证

问题描述

@Value
@Builder
public class Parent {

    @NotNull
    private String firstName;
    private Child child;
@Builder
public class Child {

    @NotNull
    private String firstName;

这是我的挑战,我们正在做 DDD,我们在构造函数中或通过构建方法(构建器模式)对对象进行验证。我想要实现的是能够以我可以收集所有验证错误的方式构建完整的对象树。

正如您在下面的代码中看到的那样,我将只收集孩子缺少父母名字的错误。

请注意,这些对象是手动创建的,否则,我只会添加@Valid 等,但我认为当您手动构建对象时这不起作用。

仅供参考:我使用弹簧靴堆栈。

Parent.builder()
                .firstName(null)
                .child(Child.builder()
                        .firstName(null)
                        .build())
                .build();

标签: javaspring-bootvalidationdomain-driven-design

解决方案


我通常将验证模型和域模型分开。

例如,我对表示请求正文的视图应用验证(请参阅此处的此类验证示例),然后仅在确定验证通过后才尝试实例化值对象。在您的情况下,这意味着您会将注释放在视图上,而不是 VO 上。

请注意,在 VO 上应用验证是没有意义的:您能够创建它的事实意味着所有约束都已得到满足。


推荐阅读