Android Datenbank Klasse nur für CRUD-Operation, oder auch mehr ?

jhjh

Bekanntes Mitglied
Hallo,
für mein Frage ist ein Beispiel glaube am besten.
Angenommen ich habe in einer Activity boolsche Variablen die, je nach Datensatz aus einer SQLite Datenbank, true oder false ergeben.
In etwa so:
Code:
if (wert_1 == 1){
   b = true
   if (wert_2 == 1 && wert_3 == 5){
      f = true
      g = false
   else{
     t = false
else if ....
.....
....
Über eine Datenbank Klasse habe ich Zugriff auf die Datenbank und hole mir von dort die Werte bzw. den Datensatz.
Ich frage mich jetzt ob es "ok" ist, wenn ich diesen Vergleich direkt über die Datenbank Klasse abwickle und das Ergebnis dann an die jeweilige Activity weiterleite ?
Oder sollte ich über die Datenbank Klasse nur den Datensatz an die Activity weiterleiten und dort dann den Vergleich machen ? ODER ist es einfach völlig egal wie ich das mache ? 😀😀
 
Eigentlich dieser hier. Nach dem ersten Post gab es meinen Beitrag nicht und habe es dann nochmal abgeschickt. Habe dann erst gemerkt, dass mein ursprünglicher Beitrag automatisch in das andere Unterforum verschoben wurde.
 
Lass es mich mal so sagen: wenn Dein Beispiel tatsächlich Dein Code ist, dann ist die Frage, wohin damit, Dein geringstes Problem 😛

Andersrum: Du musst schon ein wenig genauer werden, worum es geht. Über ein paar logische Verknüpfungen über nichtssagende Werte kann man nicht pauschalieren.
 
Wenn Dein Beispiel tatsächlich Dein Code ist, dann ist die Frage, wohin damit, Dein geringstes Problem
Wegen den nicht aussagekräftigen Variablenamen meinst du ? 🙄
Aber nein war nur ein Beispiel.

Beispielsweise habe ich eine Funktion, die "gelöschte" Kunden nach einen Monat "wirklich" löscht 😀 Also es ist so, dass ein gelöschter Kunde vorerst nur verschoben wird, sodass man noch Infos zu dem Kunden einsehen kann. Nach einem Monat wird der dann halt aus der Datenbank gelöscht. Die Funktion ist derzeit in meiner Datenbank Klasse. Über meine MainActivity rufe ich die Funktion nach dem Start der App auf. Ich habe jetzt die Möglichkeit
a) ich lasse es so
oder
b) ich lasse mir von der MainActivity jeden Kunden aus der Datenbank (über die Datenbank Schnittstelle) zurückgeben ->Überprüfe ob Kunde xy gelöscht wird oder nicht -> Falls Löschung, dann erteile ich der Datenbank nur den "Lösch Befehl"...Derzeit wird über die Datenbank Schnittstelle auch die Überprüfung durchgeführt

Code:
//Löschen von Kunden die ein Monat oder länger keine Kunden mehr sind
public void ueberpruefeAbgaenger(Date datumHeute) {
    SQLiteDatabase db = this.getWritableDatabase();
    Datum datum = new Datum();
    Calendar cal = Calendar.getInstance();
    cal.setTime(datumHeute);
    int id, tagHeute, monatHeute, tagAbgang, monatAbgang;
    String datumAbgang;
    tagHeute = cal.get(Calendar.DAY_OF_MONTH);
    monatHeute = datumHeute.getMonth() + 1;
    //Alle gelöschten Kunden aus der DB holen
    String str = "SELECT Abgang,_id FROM Kunde";
    Cursor cursor = db.rawQuery(str, null);

    if (cursor.moveToFirst()) {
        do {
            datumAbgang = cursor.getString(0);
            //Falls Kunde gelöscht wurde
            if (datumAbgang != null) {
                id = cursor.getInt(1);
                monatAbgang = datum.getMonat(datumAbgang);
                tagAbgang = datum.getTag(datumAbgang);
                //Falls Kunde im vorherigen Monat gelöscht wurde
                if (monatHeute == monatAbgang + 1) {
                    //Falls der Löschtag größer als der Heutige Tag ist
                    if (tagHeute >= tagAbgang) {
                        //Kunde löschen
                        delete(id);
                    }
                    //Falls Kunde bereits vor mehreren Monaten gelöscht wurde
                } else if (monatHeute > monatAbgang) {
                    //Kunde löschen
                    delete(id);
                }
            }
        } while (cursor.moveToNext());
    }
}
 
Prinzipiell haben DB-Geschichten nichts im UI verloren. Ich würde auch nicht jeden Kunden einzeln anschauen sondern einfach ein SQL-Statement ausführen, mit dem alle zu löschenden Kunden auf einmal gelöscht werden. Könnte in etwa so funktionieren:
SQL:
DELETE FROM Kunden WHERE Abgang IS NOT NULL AND date(substr(Abgang,7,4) || substr(Abgang,4,2) || substr(Abgang,1,2)) <= date('now', '-1 month');
 
Danke, werde ich Morgen mal probieren! Wenn ich das so sehe denke ich, dass ich bei vielen anderen Sachen auch zu kompliziert gedacht habe und vieles hätte vereinfachen können 😱
btw: Kann man das mit dem Kommentieren in etwa so machen wie ich das gemacht habe ? Ist das ein guter Stil ? Gerade bei Fallunterscheidungen finde ich das dann einfach viel Übersichtlicher. Auch bei meine Definierten Methoden habe ich Kommentare gesetzt die mit paar Wörter ganz grob beschreiben, was die Methode macht. Ansonster setze ich Kommentare meist du bei API Spezifischen Sachen bei denen man ohne ein Kommentar nicht so wirklich verstehen würde was da passiert.
 
Kommentare sind meist Zeichen für schlechten Code. Ein Kommentar soll beschreiben warum etwas gemacht wurde und nicht was gemacht wird. Das Was soll nämlich im Code stehen. Guter Code liest sich fast wie Prosa - ohne Kommentare.

Mal ein paar Beispiele:
Java:
            //Falls Kunde gelöscht wurde
            if (datumAbgang != null) {

Die Intention Deines Kommentars ist klar: datumAbgang != null ist nichtssagend. Um dem Spaß Ausdruck zu verleihen, fügst Du einen Kommentar ein.

Warum nicht einfach:
Java:
            if (istKundeZuEntfernen(datumAbgang)) {
Das ist nur ein Beispiel, um die Idee zu zeigen. Je nachdem, wie die Terminologie ist, kann die Methode natürlich auch anders heißen.

Ein anderes Negativbeispiel:
Java:
                    //Falls der Löschtag größer als der Heutige Tag ist
                    if (tagHeute >= tagAbgang) {
Hier gibt es gleich zwei Probleme. Erstens ist der Kommentar in meinen Augen falsch: der Code sagt mir das genaue Gegenteil (übrigens oft ein Problem von Kommentaren; insbesondere im Zusammenhang mit Copy & Paste oder weil der Code geändert, der dazugehörige Kommentar aber nicht angepasst wurde). Zweitens braucht der Code keinen Kommentar, wenn die Variablennamen stimmen. Das, was im Kommentar steht, steht 1:1 im Code. Wenn Dir der Code zu wenig sagt, dann ändere ihn. Zum Beispiel durch Umbenennung von Variablen oder Einführung von Methoden (wie im Beispiel vorhin).
 
Vielen Dank!
Ja ist glaube besser, wenn ich die Namen von Variablen/Methoden/Klassen so wähle, dass es zu keinen Missverständnissen kommen wird und ich mir die Kommentare dadurch sparen kann.
Erstens ist der Kommentar in meinen Augen falsch: der Code sagt mir das genaue Gegenteil
True!🙄
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben