SQLiteOpenHelper方法是否应该接受对象或ID?

时间:2016-05-10 00:14:21

标签: java android sqlite standards

这可能更像是一种风格/标准/实践问题,但以下哪一种是更好的方法和原因:

public long insertSomething(MyAccount account, Employee employee, double rating) {
    ContentValues values = new ContentValues();
    values.put(ACCOUNT_ID, account.getId());
    values.put(EMPLOYEE_ID, employee.getId());
    values.put(RATING, rating);
    return mDatabase.insert(MY_TABLE, null, values);
}

这基本上是接受对象,然后在方法中使用它们的ID来执行查询。

或者:

public long insertSomething(long accountId, long employeeID, double rating) {
    ContentValues values = new ContentValues();
    values.put(ACCOUNT_ID, accountId);
    values.put(EMPLOYEE_ID, employeeID);
    values.put(RATING, rating);
    return mDatabase.insert(MY_TABLE, null, values);
}

有理由做其中一个吗?我不确定我应该采用哪种方法。

2 个答案:

答案 0 :(得分:0)

这两种实现都同样有效,因此它可以直接用于您的使用。

有时效果取决于纯粹表现以外的其他因素,如可读性和一致性。关于一致性,如果SQLiteOpenHelper中的所有方法仅使用对象或仅使用单个值作为参数,则维护代码会更容易一些,因为从长远来看,您习惯了代码的一般结构。

答案 1 :(得分:0)

首先,您将代码放在错误的位置。当然,它在技术上会起作用,但从逻辑上讲,SQLOpenHelper正如名称所示,用于不同的目的。因此,一旦您正确分离代码 - 它取决于目的以及您在应用程序中传递数据的方式。如果您主要使用ID,那么第二种方法更适合,如果您处理对象,那么第一种方法。如果混合,那么这可能是你最终会得到的结果:

public long insertSomething(long accountId, Employee employee, double rating) {
    return insertSomething(accountId, employee.getId(), rating);
}

public long insertSomething(long accountId, long employeeID, double rating) {
    ContentValues values = new ContentValues();
    values.put(ACCOUNT_ID, accountId);
    values.put(EMPLOYEE_ID, employeeID);
    values.put(RATING, rating);
    return mDatabase.insert(MY_TABLE, null, values);
}

但也许你开玩笑需要熟悉ORM,所以你很可能最终得到(构造函数也可以接受Employee对象,不是matternow):

new EmpoleeRating(accountId, employeeId, rating)
    .save();