我想知道如何执行干净的代码来组织我的服务层验证。
所以,我有这项服务:
public interface PersonService {
public Person getPerson(int idperson);
public List getPeopleWithFather( int idFather);
}
对于服务层的验证,我使用Spring AOP(Aspectj),因此要验证第一种方法:
public Person getPerson(int idperson){
return personRepository.getPerson(idperson);
}
@AfterReturning(
pointcut="execution(* business.PersonService.getPerson(..))",
returning = "result")
public void afterRunning(JoinPoint joinPoint, Object result){
Person person = (Person) result;
if(person == null){
throw new PersonNotFound();
}
}
所以在我的服务中,我不需要编写try / catch或者验证条件。但是,我不知道如何为第二种方法组织我的代码,因为:
一种方法是这样做:
public List getPeopleWithFather( int idFather){
Person father = getPerson(idFather);
if(father != null){ return personRepository.getPeopleWithFather(father); }
return null;
}
其他方式是:
public List getPeopleWithFather( int idFather){
Person father = ((PersonService) AopContext.currentProxy() ).getPerson(idFather);
return personRepository.getPeopleWithFather(father);
}
@AfterThrowing(pointcut="execution(* business.PersonService.getPeopleWithFather(..))",
throwing = "throwable")
public void afterThrowing(JoinPoint joinPoint, Exception throwable){
if( throwable instanceof PersonNotFound){
throw new PersonNotFound("whatever");
}
}
有一种更优雅的方式来执行这些验证吗?提前谢谢。