Как убрать слишком многих если операторы для удобочитаемости

выберите to_number (exception_value) из исключения, где to_number (exception_value) = 105

6
задан djdd87 30 October 2009 в 11:31
поделиться

3 ответа

С использованием охранных пунктов сэр

string userid = Reuest.QueryString["userid"];

if(userid==null)
 return denyAccess(INVALID_PARAMETER);

user = new user(userid);
if(user==null)
 return denyAccess(INVALID_USER);

if (!user.hasAccess)
 return denyAccess(INVALID_ACCESS);

//do stuff

PS. используйте либо возврат, либо выдачу ошибки

20
ответ дан 8 December 2019 в 04:53
поделиться

Лучше разбить его на несколько методов (функций). Это будет легко понять. Если какой-то новый человек прочитает код, он / она поймет логику, просто прочитав само название метода (Примечание : Название метода должно отражать, какой тест он выполняет). Пример кода:

string userid = Request.QueryString["userid"];

if(isValidParameter(userId)){
  User user=new User(userId);
    if(isValidUser(user)&&isUserHasAccess(user)){
      //Do whatever you want
     }
}

private boolean isUserHasAccess(User user){
    if (user.hasAccess){
       return true;
    }else{
        denyAccess(INVALID_ACCESS);
       return false;
    }
}

 private boolean isValidUser(User user){
    if(user !=null){
      return true;
    }else{
    denyAccess(INVALID_USER);
    return false;
    }
 }


 private boolean isValidParameter(String userId){
    if(userid !=""){
      return true;
    }else{
 denyAccess(INVALID_PARAMETER);
   return false;
  }
}
1
ответ дан 8 December 2019 в 04:53
поделиться

Вы можете немного очистить вложенность, отрицая условия и записав цепочку if-else:

string userid = Reuest.QueryString["userid"];

if (userid == "") {
    denyAccess(INVALID_PARAMETER);

} else if (null == (user = new user(userid))){
    denyAccess(INVALID_USER);

} else if (!user.hasAccess){
    denyAccess(INVALID_ACCESS);

} else {
    //etc.
}
3
ответ дан 8 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: