Erstellen von Daten-Modell-Klasse für Datenbank-handling
War ich gerade erst mit der Arbeit an einer Datenbank-Anwendung, wenn ich merkte, dass ich implementieren sollte MVC
Muster wie die Anwendung ist Recht Komplex und beinhaltet eine Reihe von Datenbank-Operationen.
In Bezug auf diese, habe ich beschlossen, erstellen Sie eine separate model class
für die Handhabung von Datenbank-Operationen. Dieser Klasse werden alle Methoden, die mich zurückbringen der Daten nach der Ausführung Sqlite-Befehl(Select z.B.) ODER wird, führen Sie einfach die SQLite-Befehl(Löschen zum Beispiel). Aber das, was ich will, ist die Trennung dieser Klasse von Database Adapter
Klasse, wo ich das öffnen, erstellen und schließen meiner Datenbank.
Lassen Sie mich, mein Konzept in code :
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);
}
}
Frage:
Was ich Fragen wollt ist dies der richtige Ansatz für die Umsetzung? Ist es in Ordnung, wenn erstellen Sie separate Klasse für Datenbank Methoden? Welche Einschränkungen oder Probleme, die Sie Jungs denken, dass könnte ärger mich später auf? Auch gibt es einen besseren Weg zur Umsetzung der oben Konzept?
Dank
Stein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie sich beziehen, als ein 'model-Klasse' ist besser bekannt als ein data access object (DAO). Ihr Modell würde in der Regel eine Reihe von Klassen, halten Sie Ihre Daten und business-Logik. In Sie Fall, wahrscheinlich ein
Student
Klasse mit der ID, name, GPA, etc. Eigenschaften. Wenn Sie möchten, um separate Daten-Zugriff von Ihrem Modell, Sie hätte Ihre Daten zugreifen-Klasse (DatabaseHelper
) die Datenbank Abfragen und die Daten verwenden, wird es zurückStudent
Objekte oder eineList<Student>
. Es gibt wirklich nicht viel Sinn, bei der Trennung der Daten-access-Klasse aus der Datenbank Helfer, es ist besser, dass alle Datenbank-bezogenen code in einem Ort.Den Einsatz von model-Klassen (ausschließlich), jedoch nicht immer praktikabel, auf Android, denn es hat native Unterstützung für das abrufen und anzeigen von Daten aus einem Cursor (
CursorAdapter
usw.). Wenn Sie möchten, zu verwenden, dass Sie würde haben, um setzen Sie Ihre Daten nicht als model-Objekte, sondern alsCursor
's. Wie für die Anbieter von Inhalten, haben einen Blick auf diese zu, aber wenn Sie nicht brauchen, um setzen Sie Ihre Daten in andere Anwendungen, schreiben einenContentProvider
wäre des guten zuviel.Auf einer anderen Anmerkung, Sie wollen nicht das öffnen und schließen der Datenbank für jede Abfrage. Es ist eigentlich sicher, es zu verlassen, öffnen, wird es automatisch geschlossen, wenn Ihre app-Prozess stirbt.
Ich das in meiner Anwendung, und es funktioniert wunderbar, der code sauber ist und es nicht auf die Leistung auswirken, insbesondere mit der hardware der Handys von heute. Ich habe versucht, alle anderen Ansätze, und selbst verwendet ein content-provider, aber es nur über komplizierte Dinge meiner Meinung nach.
android-native-Ansatz der Datenmodellierung ist contentproviders. Link
Art von abstracts, die den Typ der Datenquelle, wie gut.
ich habe es in einer ähnlichen Art und Weise. aber wieder ist es auch subjektiv.