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
我真的有一种感觉,我很容易打破僵局(不要重复你自己)
事实上,无论表单验证会带来什么,这都将由我的Car
builder的验证器提供,因为模型上的验证是最重要的验证位置,不应该依赖于其他任何东西
我设想一个解决方案,在我的Controller
附近有一个Helper
类,处理构建器使用的同一个验证器对象。然而,它迫使我获取所有的验证方法public
,以便在我的web表单的任何验证步骤中独立调用(如上面的代码片段)
在避免干涸的同时保持这一建筑原则的良好实践是什么
共 (0) 个答案