1

現在、コードは次のようになっています。

SqlTables.java:

// Separate file
public enum SqlTables {
    TABLE_1("table_1"),
    .
    .
    .
    TABLE_N("table_n");
    final String name;
    private SqlTables(String name) {
        this.name = name;
    }
}

Table1Columns.java:

// Separate file
public enum Table1Columns {
    ...
}

SqlDatabaseInterface.java:

Cursor c = db.query(SqlTables.TABLE_1.toString(), null...);
final int indexId = c.getColumnIndexOrThrow(
        Table1Columns.ID.toString());
final int indexName = c.getColumnIndexOrThrow(
        Table1Columns.NAME.toString());
while (c.moveToNext()) {
    final String id = c.getString(indexId);
    final String name = c.getString(indexName);
}

Android が列をインデックスにマッピングする方法に関するドキュメントは見つかりませんでした。そのため、クエリで列が指定された順序に基づいていることを確認しましたが、これが 100% 機能するという保証はありません。時間、または将来の更新でこの動作が維持されること。使用する利点はgetColumnIndexOrThrow(...)、インデックスが参照する列がクエリに含まれている限り、インデックスが常に正しいことが保証されることです。欠点は、退屈なだけでなく、コードが読みにくくなり、メソッドの長さが大幅に増加することです。一方、 を呼び出さずにインデックスを指定することもできます。そうすれgetColumnsIndexOrThrowばコードは短くなりますが、ドキュメントがないため、間違っているように感じられます。

4

1 に答える 1

3

いいえ、列のインデックス値をコードにハード コードしないでください。その場合、データベースを管理することはほとんど不可能になります (テーブルに変更を加えると、インデックス値が変更される可能性があるため)。

私が知る限り、あなたのコードは次の理由で読みにくいです:

  1. への不要な呼び出しでコードをリタリングしていますtoString()。それらを取り除くだけです...それらは完全に冗長です。

  2. キーワードを使いfinalすぎて、コードが乱雑になっています。これは、変数の値を誤って変更する可能性がある状況での予防策として使用する必要があります。これはそれらの状況の 1 つではありません...

  3. 単純なステートメントを複数行に広げています。1 行だけ使用すると、非常に読みやすくなります。

とはいえ、上記のコーディング手法のいずれにも技術的に問題はありません。私が言っているのは、コードを読みやすくすることを本当に気にしているなら、それらを提案として検討したいかもしれないということです.

于 2012-06-24T00:50:23.403 に答える