0

最近、Android アプリで疑似 ActiveRecord スタイルの db 呼び出しを作成しようとしていて、User.all(Context dbContext)、User.find(long id、Context dbContext)、User. delete(long id, Context dbContext) など。疑似 ActiveRecord とは、「実際の ActiveRecord ライブラリ」などにするつもりはないということです。コード内で理解しやすい db 呼び出しを使用したいだけで、個人的には ActiveRecord スタイルが最適です。これまでのところ非常に良好で、たとえば次のコードを使用しても問題はありません。

    public static Cursor allAsCursor(Context dbContext) {
    DBHelper dBHelper = new DBHelper(dbContext);
    SQLiteDatabase database = dBHelper.getReadableDatabase();

    Cursor dbQueryResult = database.query(DBHelper.TABLE_NAME_USERS, null, null, null, null, null, "_id DESC");
    dbQueryResult.getCount();

    database.close();
    dBHelper.close();
    dbContext = null;


    return dbQueryResult;
}

しかし、私が気になるのは、呼び出しを行うときに常にアクティビティコンテキストなどを渡すことであり、User クラス (User.find、User. all など) すべての db クエリのアプリケーション コンテキストを格納する静的変数? これは、アプリケーション ランチ時または最初のクエリ リクエストの前に行うことができます。

私の考えは、共有アプリケーションから常に取得するクエリのほとんどの静的コンテキスト マネージャーを取得した iOS CoreData のことから来ています。

考え、提案、アイデアはありますか?

ありがとう。

4

1 に答える 1

0

メソッドが静的であるため、これらのDBクラスメソッドはすべて静的であると推測しているため、クラスは常に静的な方法で使用されますか? また、Activity コンテキストまたはアプリケーション コンテキストで渡していますか。アプリケーション コンテキストを使用している場合は、コンテキストを設定するための別の静的メソッドを追加し、コンテキストへのプライベートな静的参照を作成します。

例えば:

private static Context context;

public static void setContext(Context context){
    YourDBHelperClass.context = context;
}

これで、メソッドは、トランザクションを行うたびにコンテキストを渡す必要がなくなり、このコンテキストを参照するだけで済みます。

アクティビティ コンテキストを渡す場合は、そのままにしておきます。そうしないと、古いコンテキストを使用しようとするリスクがあります。

于 2012-02-21T10:51:57.063 に答える