【发布时间】:2014-09-03 22:51:09
【问题描述】:
我开始使用 Android 应用程序开发,我非常惊讶像 android.database.DatabaseUtils 这样的 API 在使用其方法时不会向上抛出异常。我想知道我认为糟糕设计的原因是什么。 (一定是有原因的..)
以here为例
使用方法long execute()
public long execute() {
if (mPreparedStatement == null) {
throw new IllegalStateException("you must prepare this inserter before calling "+ "execute");
}
try {
if (LOCAL_LOGV) Log.v(TAG, "--- doing insert or replace in table " + mTableName);
return mPreparedStatement.executeInsert();
} catch (SQLException e) {
Log.e(TAG, "Error executing InsertHelper with table " + mTableName, e);
return -1;
} finally {
// you can only call this once per prepare
mPreparedStatement = null;
}
}
所以这个方法捕获 SQLException,而不是向调用者抛出这个或另一个包装的异常,它只是返回 -1 并使用 logcat 记录错误。
作为一名开发人员,我觉得这非常令人震惊,就好像我正在使用这个 API 并且我得到一个值 -1 我知道出了点问题,但除非我检查 logcat 日志,否则我不知道为什么会出现问题。
也许我弄错了,请告诉我,但是一个 API 的方法返回 -1 的操作是一个糟糕的 OO 设计,如果出现问题它可以简单地抛出异常并让开发人员以他/她希望从 Exception 对象中提取所有详细信息的方式处理该异常。你不觉得吗?
有什么理由这样做吗?
我已将 logback 与我的应用程序集成,我希望不需要使用 logcat 来做任何事情。但是在看到这个 API 之后,恐怕我不得不以某种方式将过滤后的 logcat 导出到一个文件中,以查看当我的应用收到 -1 在 SQLlite 上执行某些操作时出了什么问题。
有什么建议吗?我在这里遗漏了什么吗?
非常感谢!
【问题讨论】:
标签: java android database sqlite database-design