当前位置: 首页 > 知识库问答 >
问题:

在DDD对象中混合JSR303 Bean验证和手动(通过Apache Commons)

柳绪
2023-03-14
public class Position {
    private static final int LATITUDE_AMPLITUDE = 90;
    private static final int LONGITUDE_AMPLITUDE = 180;

    private Float latitude;
    private Float longitude;

    public Position(float latitude, float longitude) {
        Validate.inclusiveBetween(-LATITUDE_AMPLITUDE, LATITUDE_AMPLITUDE, latitude,
                "Latitude must be +- " + LATITUDE_AMPLITUDE);
        Validate.inclusiveBetween(-LONGITUDE_AMPLITUDE, LONGITUDE_AMPLITUDE, longitude,
                "Longtitude must be +- " + LATITUDE_AMPLITUDE);

        this.latitude = latitude;
        this.longitude = longitude;
    }
}

我们决定不使用JSR303,因为它将域对象与基础结构耦合起来,并且需要外部干预来启动验证。

但是当我们开始实现RESTendpoint时,我们再次面临验证问题,因为json转换器不使用类构造函数,而是通过反射注入值。

通过JSR303和Jersey的@valid注释验证对象非常容易,但是需要用JSR303注释域对象。我们有一些选择:

    null

你对此有什么看法?将JSR303和手动验证混合在一起是一种好方法吗?

共有1个答案

荆乐
2023-03-14

在广泛使用这两种模型之后,我个人发现使用JSR303 bean验证更令人愉快。我指的是纯粹使用bean验证注释,没有手动验证代码。

Bean验证注释将验证逻辑与域实体本身解耦。我相信这是一件好事,因为它减少了域实体中的样板代码,并使它们更具可读性和可维护性。正如您所提到的,它确实要求您注释实体中的字段以便使用它。根据现有代码库的大小,这项工作可能不是微不足道的。

我的大部分经验都是使用Hibernate Validator,我发现它是一个好的、快速的JSR303实现。

 类似资料:
  • 我将在Spring中使用DDD构建一个新应用程序。我将有一个REST适配器、一个JPA适配器和我的域模型。 我的问题是在哪里进行现场验证?假设我有一个REST方法来下订单,我应该在哪里验证请求中的订单数量是否大于0?在REST适配器的DTO中?或者在我的域实体中,因为验证应该是业务逻辑的一部分? 如果我在REST请求的DTO中进行验证,我就可以将验证检查添加到DTO的字段中,并在我的REST控制器

  • 关于混合对象 可以混合对象以创建形状,并在两个对象之间平均分布形状。也可以在两个开放路径之间进行混合,在对象之间创建平滑的过渡;或组合颜色和对象的混合,在特定对象形状中创建颜色过渡。 注:混合对象与将混合模式或透明度应用于对象不同。有关混合模式和透明度的信息,请参阅第 158 页的 “关于混合模式 ”。在对象之间创建了混合之后,就会将混合对象作为一个对象看待。如果您移动了其中一个原始对象,或编辑了

  • 关于混合对象 可以混合对象以创建形状,并在两个对象之间平均分布形状。也可以在两个开放路径之间进行混合,在对象之间创建平滑的过渡;或组合颜色和对象的混合,在特定对象形状中创建颜色过渡。 注意:混合对象与将混合模式或透明度应用于对象不同。有关混合模式和透明度的信息,请参阅关于混合模式。 在对象之间创建了混合之后,就会将混合对象作为一个对象看待。如果您移动了其中一个原始对象,或编辑了原始对象的锚点,则混

  • 我有以下问题,有一个常规的spring模型(我们称之为“a”),带有一些与验证相关的注释。接下来是一个命令对象(定义一些字段的常规POJO类,其中一个是类型a的对象)。command对象实现了Validator接口,以使绑定和验证在控制器方法中工作。 问题是,如何在命令对象内部使用注释配置的验证(因为它实现了Validator接口,所以它有supports()和validate()方法)。 我试图

  • 我有一根弦,就像, 有一个模特班,比如, 现在我通过以下代码将字符串转换为Java对象, 因此,验证(min=1且不为null)不会与此一起发生。在将字符串转换为java对象时,如何进行验证?

  • null 我们尝试了几件事: > 发出命令: 激发命令 同步处理此命令,如果命令无效或引发事件,则返回错误。 null 缺点:-据我所知,应该用佐贺来编排流程。这里我们介绍“验证”的概念。我不确定这是不是推荐的方法。 验证是一个非常常见的概念。在分布式完全异步系统中如何处理它?