Java 验证字符串参数的位置
我有一个Student类,它必须有一个字符串ID的属性,该属性必须经过验证。我不确定是在student类中验证它,还是在我实现student类的类中验证它。这有意义吗?假设ID是最终的且不可变的,那么一种方法是让学生构造函数抛出异常,可能是新的IllegalArgumentException(“无效的学生ID”)代码> 您还可以在Student类中提供静态方法,用于验证字符串是否有效,以防您需要在不创建Student对象的情况下进行检查 但我认为,判断ID是否有效的逻辑应该在学生课堂上Java 验证字符串参数的位置,java,string,validation,class,Java,String,Validation,Class,我有一个Student类,它必须有一个字符串ID的属性,该属性必须经过验证。我不确定是在student类中验证它,还是在我实现student类的类中验证它。这有意义吗?假设ID是最终的且不可变的,那么一种方法是让学生构造函数抛出异常,可能是新的IllegalArgumentException(“无效的学生ID”) 您还可以在Student类中提供静态方法,用于验证字符串是否有效,以防您需要在不创建Student对象的情况下进行检查 但我认为,判断ID是否有效的逻辑应该在学生课堂上 如果有(或将来
如果有(或将来可能)不同类型的学生ID,你也可以考虑抽象的工厂模式,但是听起来像是一个过份的错误。
< P>假设ID是最终的和不可变的,那么一种方法是让学生构造函数抛出一个异常,很可能是<代码>新的ILLALGALGUMUMENTROR异常(“无效学生ID”);代码> 您还可以在Student类中提供静态方法,用于验证字符串是否有效,以防您需要在不创建Student对象的情况下进行检查 但我认为,判断ID是否有效的逻辑应该在学生课堂上如果有(或将来可能)不同类型的学生ID,你也可以考虑抽象的工厂模式,但是听起来像是一个过份的错误。
< P>如果学生已经在使用内部的任何验证,否则使用第二个/<Class Student
{
public boolean validate ()
{
//some logic to validation
}
}
模型、控制器或动作的内部
public boolean validate ()
{
//some logic to validation
}
如果学生已经有任何内部业务使用验证内部其他使用第二个
Class Student
{
public boolean validate ()
{
//some logic to validation
}
}
模型、控制器或动作的内部
public boolean validate ()
{
//some logic to validation
}
其中一种方法是使用验证对象。例如,请参见Spring框架中使用的验证方法。创建一个对象,该对象使用两种方法实现接口
验证器
:一种用于检测验证器是否可以验证要验证的实例,另一种用于验证实例
public class StudentValidator implements Validator<Student> {
public boolean supports(Student student) {
// ...
}
public void validate(Object target, Errors errors) {
// ...
}
}
公共类StudentValidator实现验证器{
公共布尔支持(学生){
// ...
}
公共无效验证(对象目标、错误){
// ...
}
}
这种方法将对象的代码和验证方法分离,在组合验证器时提供更大的灵活性:
- 即使不遵守类层次结构,也可以组合多个验证器(POJO原则)李>
- 当您需要使用来自其他系统(例如数据库)的数据验证字段时,这种方法避免在POJO域类中混合使用数据库/持久性代码
请参阅。方法之一是使用验证对象。例如,请参见Spring框架中使用的验证方法。创建一个对象,该对象使用两种方法实现接口
验证器
:一种用于检测验证器是否可以验证要验证的实例,另一种用于验证实例
public class StudentValidator implements Validator<Student> {
public boolean supports(Student student) {
// ...
}
public void validate(Object target, Errors errors) {
// ...
}
}
公共类StudentValidator实现验证器{
公共布尔支持(学生){
// ...
}
公共无效验证(对象目标、错误){
// ...
}
}
这种方法将对象的代码和验证方法分离,在组合验证器时提供更大的灵活性:
- 即使不遵守类层次结构,也可以组合多个验证器(POJO原则)李>
- 当您需要使用来自其他系统(例如数据库)的数据验证字段时,这种方法避免在POJO域类中混合使用数据库/持久性代码
请参阅。ID是一个格式为GXXXXXXXX的字符串,其中G是文字,X是数字。如果各个模块之间的“合同”暗示应验证字符串,则验证该字符串。最明显的地方是学生构造函数,但您可能希望在键入数字时动态验证数字并提供实时反馈,或者禁用“保存”按钮(并显示“请输入…”消息),直到输入有效值。ID是GXXXXXXXX格式的字符串,如果G是文字,X是数字,那么只要各个模块之间的“契约”暗示应该验证字符串,就可以验证字符串。最明显的地方是学生构造函数,但您可能希望在键入数字时动态验证数字并提供实时反馈,或者禁用“保存”按钮(并显示“请输入…”消息),直到输入有效值。您可以说,“另外提供一个静态方法”-你的意思是我可以在构造函数中验证它吗?@hyde你也可以签入setter类。这种方法不能在任何地方使用,例如在MVC框架中,它创建空实例,并用表单中的参数填充。允许学生id可变听起来像是各种潜在错误的配方,例如,在使用集合时,您说,“另外提供一个静态方法”-您的意思是我可以在构造函数中验证它吗?@hyde您也可以签入setter类。这种方法不能在任何地方使用,例如,在MVC框架中,创建空实例以填充表单中的参数。允许学生id可变听起来像是各种潜在错误的处方,例如在使用集合时。一些框架更喜欢将验证任务委托给对象或控制器之外的人。例如,请参阅验证程序如何在Spring框架中工作。Kartoch谢谢。但在本例中,没有web应用程序,因此这也是可能的选择。关于组合验证?还是针对数据库进行验证?请参阅我的帖子以获得更多解释…一些框架更喜欢将验证任务委托给对象或控制器之外的人。例如,请参见Spring框架中验证器的工作原理