2011-08-03 2 views
7

Я только начал работать над приложением базы данных, когда понял, что должен реализовывать шаблон MVC, поскольку приложение является довольно сложным и включает в себя несколько операций с базой данных.
В связи с этим я решил создать отдельный файл model class для обработки операций с базой данных. Этот класс будет иметь все методы, которые возвратят мне данные после выполнения команды Sqlite (выберите для примера) ИЛИ просто выполнит команду SQLite (например, Delete). Но я хочу отделить этот класс от класса Database Adapter, где я открываю, создаю и закрываю свою базу данных.
Позвольте мне поставить свою концепцию в код:Создание класса модели данных для обработки базы данных

public class DataModel 
{ 
/* 

Private members 

*/ 

// Method to Select data from Student table 
public ArrayList<String> FetchStudents (parameter 1) 
{ 
private ArrayList<String> arrStudent; 


DatabaseAdapter objDB= new DatabaseAdapter(); 
objDB.open(); 
/* 
Some code 
*/ 
objDB.close(); 


return arrStudent 
} 

//Method to delete record from Student table 
public DeleteStudent(parameter 1) 
{ 
DatabaseAdapter objDB= new DatabaseAdapter(); 
objDB.open(); 
//Some code 
objDB.close(); 
} 

/* 

Rest of methods 

*/ 
} 

// DatabaseAdapterClass

private static class DatabaseHelper extends SQLiteOpenHelper { 
DatabaseHelper(Context context) { 
super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
/** 
* onCreate method is called for the 1st time when database doesn't exists. 
*/ 
@Override 
public void onCreate(SQLiteDatabase db) { 
Log.i(TAG, "Creating DataBase: " + CREATE_STUDENT_TABLE); 
db.execSQL(CREATE_STUDENT_TABLE); 
} 
/** 
* onUpgrade method is called when database version changes. 
*/ 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
         + newVersion); 
} 
} 

Вопрос:
То, что я хочу спросить, это правильный подход реализации? Хорошо, если создать отдельный класс для методов базы данных ? Какие ограничения или проблемы, которые, по вашему мнению, могут беспокоить меня позже? Кроме того, есть ли лучший способ реализовать вышеупомянутую концепцию?

Благодаря
камень

ответ

11

То, что вы называете «классом модели», более широко известно как объект доступа к данным (DAO). Ваша модель обычно представляет собой набор классов, в которых хранятся ваши данные и бизнес-логика. В вашем случае, вероятно, класс Student, имеющий свойства ID, имя, GPA и т. Д. Если вы хотите отделить доступ к данным от своей модели, у вас будет свой класс доступа к данным (DatabaseHelper), запрашивающий базу данных и использование данных, которые он получает, для возврата Student объектов или List<Student>. В деле разделения класса доступа к данным из помощника базы данных очень мало смысла, лучше всего использовать весь код, связанный с базой данных, в одном месте.

Использование классов моделей (только), однако, может быть не всегда практичным на Android, поскольку оно имеет встроенную поддержку для получения и отображения данных из курсора (CursorAdapter и т. Д.). Если вы хотите использовать любой из них, вам придется подвергать свои данные не объектам модели, а как Cursor. Что касается контент-провайдеров, взгляните на них тоже, но если вам не нужно подвергать свои данные другим приложениям, запись ContentProvider может быть излишней.

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

0

моделирование нативного подхода данных андроида является contentproviders. Link

Это своего рода реферат типа источника данных.

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

1

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

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