Dove sarebbe meglio gestire un'eccezione?

0

Immagina di avere il seguente metodo DAO:

public Employee getEmployeeById(Integer id){
    NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(getJdbcTemplate());
    String sql = "SELECT * FROM users WHERE id = :userId";
    Map<String, Object> parameterMap = new HashMap<String, Object>();
    parameterMap.put("userId", id);
    return jdbcTemplate.queryForObject(sql, parameterMap, new EmployeeRowMapper());// Throws 
                                                               //EmptyResultDataAccessException
}

Il metodo DAO viene utilizzato dal metodo controller:

public class EmployeeListController{

    @Resource(name = "employeeDAO")
    private EmployeeDAO employeeDAO;

    @RequestMapping(value="/{empId}", method=RequestMethod.GET)
    public String getEmployeeById(@PathVariable String empId, Model model){
        model.addAttribute("employee", employeeDAO.getEmployeeById(Integer.valueOf(empId)));
        return "employeesList";
    }
}

Dove sarebbe meglio gestire l'eccezione? Nel metodo del controller o nel metodo DAO? Penso che nel controller sarebbe, perché altrimenti dovremmo restituire l'oggetto con proprietà vuote, il che non è buono. È corretto?

    
posta user3663882 04.01.2015 - 15:27
fonte

1 risposta

1

La risposta alla tua domanda "dove sarebbe più appropriato gestire l'eccezione" dipenderà dalla semantica voluta per il metodo getEmployeeByID .

In .NET Framework, i metodi che semanticamente non devono mai generare un'eccezione sono preceduti da Try, come in Double.TryParse() . Di solito, si passa una stringa per analizzare e una variabile ref , e la funzione restituisce un valore booleano che indica il successo o il fallimento.

In altre parole, se gestisci l'eccezione nel metodo getEmployeeByID , devi anche restituire uno stato al chiamante che indica se l'operazione è riuscita o meno.

Poiché non vedo alcuna prova che il tuo metodo getEmployeeByID restituisca qualcosa che indica il successo o l'insuccesso, la semantica del tuo metodo impone che l'eccezione passi al chiamante. Ergo, gestiresti l'eccezione nella classe EmployeeListController .

Ulteriori letture
Java ha un int.TryParse che non genera un'eccezione per dati non corretti?

    
risposta data 04.01.2015 - 20:28
fonte

Leggi altre domande sui tag