Привет. У меня есть слой DAO, где идет работа с базой данных. Там есть методы что-то вроде createUser(). Вгляните:
public boolean createUser(User user) throws DAOException {
ConnectionPool connectionPool = ConnectionPoolImpl.getInstance();
try (Connection connection = connectionPool.getConnection()) {
final String CREATE_USER_SQL = "INSERT INTO hostel.user" +
"(`login`," +
"`password`," +
"`first_name`," +
"`last_name`," +
"`sex`," +
"`country`," +
"`city`," +
"`registration_date`," +
"`date_of_birth`," +
"`phone_number`," +
"`discount_id`," +
"`account_status_id`)" +
"VALUES (?, (SELECT SHA2(?, 256)), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try (PreparedStatement preparedStatement =
connection.prepareStatement(CREATE_USER_SQL)) {
preparedStatement.setString(1, user.getLogin());
preparedStatement.setString(2, user.getPassword());
preparedStatement.setString(3, user.getFirstName());
preparedStatement.setString(4, user.getLastName());
preparedStatement.setBoolean(5, user.isSex());
preparedStatement.setString(6, user.getCountry());
preparedStatement.setString(7, user.getCity());
preparedStatement.setDate(8, new Date(user.getRegistrationDate().getTime()));
preparedStatement.setDate(9, new Date(user.getDateOfBirth().getTime()));
preparedStatement.setInt(10, user.getPhoneNumber());
preparedStatement.setInt(11, user.getDiscountId());
preparedStatement.setInt(12, user.getAccountStatusId());
return preparedStatement.executeUpdate() > 0;
}
} catch (SQLException e) {
logger.log(Level.ERROR, e);
throw new DAOException("Error while executing the query.");
} catch (ConnectionPoolException e) {
logger.log(Level.ERROR, e);
throw new DAOException("Error trying to work with the connection pool.", e);
}
}
Вопрос такой. Приходит user = null - будет экспешен, приходит user в null-полями - будет эксепшен, приходит user с неверными данными (например несуществующим discount_id - это внешний ключ) - экспешен. Я то могу и собираюсь все это проверить и исключить в слое сервиса, но будет ли это правильно? Или все-таки еще раз проверять это все на DAO? Тогда получается слишком много логики в нем