最近才领悟到exception在开发中的好处,不知是否理解有误,
例如,一个用户注册流程:
我们要根据用户的输入来返回给用户不同的结果;
“用户名格式错误”
“密码格式错误”
“邮箱格式不正确”
我不知道大家平时是怎么做的,我做这样的事情有两种处理方法:
1.有几个检测属性就写几个检测方法,然后在一个主控制类里做处理
if(Checker.invalidUserName)
return Constant.INVALID_USER_NAME;
if(Checker.invalidEmail)
return Constant.INVALID_EAMIL;
.......
2.或者简单些,直接写个方法,让它反回个int,0是密码错误,1是用户名格式错误....
但这么看起来,我们还是在面向过程写程序不是么……?而且还要处理并发问题,这synchronized一下,那synchronized一下的,搞不好哪块锁就被提前拿走了;
我最近用exception来处理,发现问题简单了很多
if(Checker.invalidUserName)
throw new InputException(Constant.INVALID_USER_NAME);
if(Checker.invalidEmail)
throw new InputException(Constant.INVALID_EMAIL);
然后我们在外面,直接在catch block里做处理;
catch(InpuException){
//do something...
}
这样既保证了我们处理时是synchronized的,又增强了代码的可读性,我想,这应该才是面向对象的设计吧??
------解决方法--------------------------------------------------------
说实话 尽量不要用Exception来处理业务相关的东西。。。
不过,有时候 用Exception处理反而比较方便 那就用Exception处理。(这种情况在处理业务层的东西的时候比较多见)
如果,在写基础框架,还是尽量避免。。。。。。
------解决方法--------------------------------------------------------
你只是说到Exception的自定义异常,只是Exception的一部分,而我们大多都要继承系统的异常,从而改造成自己所需要的。
而且一个很直观的错误一般也不用异常处理,而对比较不好把握的情况时我们才使用它。
------解决方法--------------------------------------------------------
exception特别是checked exception会增加程序处理的开销毫无疑义。这个和exception类本身的细节没有关系。
exception就是exception,如果属于你的业务的正常流程,就不能算exception.
用户输入了错误格式,对于用户来说可能是异常,但是对于系统来说却不一定是。
一个可以借鉴的例子是:hibernate以前所有的hibernateException都是checked exception,后来都换成了unchecked exception.
------解决方法--------------------------------------------------------
使用checked exception控制流程,性能开销肯定是有的,但是,是不是大的足够影响系统的性能?就我的经验来说,那点开销对系统运行并没有显着的影响。而这样好处显而易见:代码清晰可读,扩展性强。
------解决方法--------------------------------------------------------
如果需要这种判断,也只能逐一比较了。你的做法只是把判断转移到catch段而已。
而且用异常控制流程是不建议使用。当然,就事论事,看情况了。
------解决方法--------------------------------------------------------
用异常慢,最好是用struts的校验来做,不过,有时候的确需要用异常来处理一些东西。
------解决方法--------------------------------------------------------
使用checked exception控制业务流程还有一个很大的好处:业务异常本身可以携带信息.
------解决方法--------------------------------------------------------
自定义异常好实用的说!
还可以配置一个异常信息.properties
------解决方法--------------------------------------------------------
其实当前异常机制还不太好
------解决方法--------------------------------------------------------
不推荐用异常处理去实现一些业务逻辑的东西!
至于你所说的“用户名格式错误”“密码格式错误”“邮箱格式不正确”之类的,可以采用javascript去实现!