有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Play Framework 2/冗余对象验证

假设一个Car模型对象(如case class)是不可变的,并使用构建器模式创建。(约书亚·布洛赫的建筑图案)

它的build方法调用CarValidator对象,以允许创建或不创建相关的Car。否则,它会抛出一个IllegalStateException,并对意外字段进行精确化

因此,没有人可以在运行时的任何时候创建过时或无效的Car,太棒了

假设现在有一个web表单来创建Car。Play的控制器将包含以下表单映射:

val carForm = Form(               //this is a conceptual sample
    mapping(
      "brand" -> nonEmptyText,
      "description" -> nonEmptyText,
      "maxSpeed" -> number
      "complexElement" -> number.verifying(........) //redundant validation here
    )(Car.apply)(Car.unapply)
  )   

在这个例子中,有一些基本字段,但是想象一下更复杂的字段需要复杂的业务验证,比如这里的complexeElement

我真的有一种感觉,我很容易打破僵局(不要重复你自己)

事实上,无论表单验证会带来什么,这都将由我的Carbuilder的验证器提供,因为模型上的验证是最重要的验证位置,不应该依赖于其他任何东西

我设想一个解决方案,在我的Controller附近有一个Helper类,处理构建器使用的同一个验证器对象。然而,它迫使我获取所有的验证方法public,以便在我的web表单的任何验证步骤中独立调用(如上面的代码片段)

在避免干涸的同时保持这一建筑原则的良好实践是什么


共 (0) 个答案