论坛首页 Java企业应用论坛

在什么时候对参数进行验证

浏览 14128 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-20   最后修改:2011-05-20
为了保证函数运行的正确性,在函数的开始一般要对参数的正确性进行判断,如果函数间相互进行调用的时候,可能会出现多次对同一个参数的正确性进行验证,出现代码冗余。
比如在Action的一个函数里面调用一个Service的方法,参数验证位置有三种情况:
  • 1、在Service的函数里面
  • 2、在Action里调用Service的方法前
  • 3、在两个函数里面都对参数进行验证(肯定会有代码冗余)

如果一个函数要求参数不能为空或是空字符串,在函数的里面应该就是这样的:
public void doSomething(String foo) {
	if (null == foo || "".equals(foo.trim())) {
		return;
	}
	// some code
}

在另一个函数里面调用到了上面的方法:
public void doAnything(String foo) {
	if (null == foo || "".equals(foo.trim())) {
		return;
	}		
	doSomething(foo);
    // some code
}

这样的话验证参数的代码就重复了。

个人认为,在Service层里面可以不进行参数的验证,假定参数都是正确的。而是在调用Service层的方法之前,先对要传入的值进行验证,正确了才能调用相应的方法。

问题核心就是,是要在一个函数里面进行参数验证,还是在调用函数前对参数进行验证。

大家平常怎么写的,相互参考下。
   发表时间:2011-05-20  
简单的会在action层进行校验,复杂一些的,比如要配合DAO层校验的就写在Service中
0 请登录后投票
   发表时间:2011-05-20  
是的,我支持在service不对参数进行校验,由上层负责数据校验,必要时可以在下层加assert。 action负责传给service层的数据的正确性,service层负责传个dao层的数据正确性。
0 请登录后投票
   发表时间:2011-05-20  
引用

在Action里调用Service的方法前
0 请登录后投票
   发表时间:2011-05-20  
我认为参数的正确性检测,应该由调用方进行,如果不正确,就不能调用相应的函数。一个函数可以假定参数是正确的进行处理。这样即可以保证参数的正确性又没有代码冗余。
0 请登录后投票
   发表时间:2011-05-20  
个人认为,在action中一般只验证用户输入的正确性。而在service中应该验证这个参数是否满足业务需要。
比如说一个日期,在action中只要验证这个传进来的参数是否日期类型。而在service中要验证这个日期是否是未来5天内的一个日期值。
当然了只举例。
0 请登录后投票
   发表时间:2011-05-20  
这怎么能说重复呢,除了dosomthing调用foo之外,说不定其他代码也调用呢
0 请登录后投票
   发表时间:2011-05-20  
这种问题通常是防御式编程,写service的能保证写action的帮你验证?再说都叫service了,未必只有action才调用,可能有其他客户端呢。
0 请登录后投票
   发表时间:2011-05-20  
楼主你说的是正确的做法
0 请登录后投票
   发表时间:2011-05-20  
kjj 写道
这怎么能说重复呢,除了dosomthing调用foo之外,说不定其他代码也调用呢

其他代码调前,也是要先进行参数验证的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics