2012-02-21 2 views
0

Недавно я пытался создать псевдо-AciveRecord-стиле db-вызовы в моем приложении для Android и разработал кучу методов класса, таких как User.all (Context dbContext), User.find (long id , Context dbContext), User.delete (long id, Context dbContext) и т. Д. Псевдо-AciveRecord Я имею в виду, что я не планирую делать это «реальной библиотекой ActiveRecord» или что-то в этом роде. Я просто хочу иметь простые для понимания вызовы db в моем коде, а стиль ActiveRecord - лучший для меня лично. До сих пор так хорошо, и у меня нет никаких проблем, имеющих этот код, например:static getApplicationContext для SQLiteOpenHelper

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, где у вас довольно статический менеджер контекста для запросов, которые вы получаете все время от общего приложения.

Любые мысли, предложения, идеи?

Спасибо.

+0

Если вы имеете в виду пользовательский класс dao, то мне кажется, что вы уже передаете контекст приложения в свой класс-помощник db, и в свою очередь вы используете ссылку db, предоставляемую db-помощником для вашего класса dao пользователя. Другими словами, контекст передается в db helper, который возвращает db, используемый пользователем dao. Это мое понимание. –

+0

да, и он хорошо работает, у меня есть 0 проблем с исключением, что это довольно утомительно проходит контекст все время. Вот почему я спрашиваю, является ли хорошей идеей или практикой просто сохранять одну статическую ссылку на контекст для каждого запроса –

ответ

0

Его все до вашего предпочтения дизайна Я думаю, поскольку метод статичен, я предполагаю, что все эти методы класса базы данных являются статическими, поэтому класс всегда используется статическим способом? Кроме того, вы передаете контекст Activity или контекст приложения. Если вы используете контекст приложения, я бы добавил еще один статический метод для установки контекста и имел частную статическую ссылку на контекст.

например:

private static Context context; 

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

Теперь ваш метод может просто ссылаться на этот контекст, вместо того, чтобы передать один каждый раз, когда вы делаете сделку.

Если вы передаете контекст активности, я оставил бы его, иначе вы рискуете попытаться использовать устаревший контекст.

+0

yep, имеет смысл. –

+0

класс используется для запроса db с помощью методов class/static и для создания новых объектов User с их собственными методами экземпляра. –

+0

Я также думал о службе для более постоянной ссылки на контекст. Любые мысли по этому поводу? Благодарю. –

 Смежные вопросы

  • Нет связанных вопросов^_^