java—sqliteopenhelper方法应该接受对象还是ID?

h5qlskok  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(326)

这可能更像是一个风格/标准/实践的问题,但以下哪种方法更好?为什么

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);
}

有理由这么做吗?我不确定应该采用哪种方法。

juzqafwq

juzqafwq1#

首先,你把你的代码放错地方了。当然,技术上可行,但逻辑上, 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对象,现在无所谓):

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

fjaof16o2#

两种实现都是同样有效的,所以这取决于什么对您来说更直接、更友好。
有时,有效性是由纯粹的性能以外的因素决定的,比如可读性和一致性。关于一致性,如果sqliteopenhelper中的所有方法都只使用对象或单个值作为参数,那么维护代码会容易一些,因为从长远来看,您会习惯代码的一般结构。

相关问题