2016-04-16 10 views
1

Ich baue eine Android-App und mit ORMLite für SQLite-Operationen und möchte Helper-Klasse für die Datenbankbehandlung erstellen. Ich habe das Problem der großen Code-Duplikate gesehen, kann aber nicht herausfinden, wie man sie umgestaltet.
Bitte beraten Sie, wenn Sie darüber nachdenken.
Ich fühle, dass dieses Problem mangels einiger Grundkenntnisse, so, wenn Sie mir einen Rat senden können, über welches Thema ich tiefer lernen sollte, wird es fantastisch sein!Wie Refactor Helper-Methoden mit Generika und Fremdklassen? (Java Android)

Hier ist die Codeblöcke benötigt in Refactoring:

public static BigGoal createBigGoalRecord(String title, 
              String description, 
              Dao<BigGoal, Integer> dao) throws SQLException { 
    BigGoal bigGoal = new BigGoal(title, description); 
    dao.create(bigGoal); 
    assignBigGoalEmptyCollection(bigGoal, dao); 
    return bigGoal; 
} 

public static SubGoal createSubGoalRecord(String title, String description, 
              ObjectiveType type, 
              Dao<SubGoal, Integer> dao, 
              BigGoal bigGoal) throws SQLException { 
    SubGoal subGoal = bigGoal.createSubGoal(title, description, type); 
    dao.create(subGoal); 
    assignSubGoalEmptyCollection(subGoal, dao); 
    bigGoal.getSubGoals().add(subGoal); 
    return subGoal; 
} 

public static List<BigGoal> getBigGoalList (Dao<BigGoal, Integer> dao) throws SQLException { 
    ArrayList<BigGoal> bigGoalList = new ArrayList<>(); 
    CloseableIterator<BigGoal> iterator = dao.closeableIterator(); 
    try { 
     while (iterator.hasNext()){ 
      BigGoal goal = iterator.next(); 
      bigGoalList.add(goal); 
     } 
    } finally { 
     iterator.close(); 
    } 

    return bigGoalList; 
} 

public static List<SubGoal> getSubGoalList (Dao<SubGoal, Integer> dao) throws SQLException { 
    ArrayList<SubGoal> subGoalList = new ArrayList<>(); 
    CloseableIterator<SubGoal> iterator = dao.closeableIterator(); 
    try { 
     while (iterator.hasNext()){ 
      SubGoal goal = iterator.next(); 
      subGoalList.add(goal); 
     } 
    } finally { 
     iterator.close(); 
    } 

    return subGoalList; 
} 
+0

Werfen Sie einen Blick auf dieses [Beispiel] (http://stackoverflow.com/questions/36506936/bessere-pattern-zu-handle-da-creation-for-pojo-using-sqlite/36511610#36511610). Es bietet einige grundlegende Ideen – jns

+0

Danke! Das hilft mir auch. –

Antwort

0

Die Oracle-Website auf Java Generics einen ganzen Abschnitt hat sich hier: https://docs.oracle.com/javase/tutorial/java/generics/

Als Beispiel für die Methoden, die eine Liste von ein Rück Einheit (zB getBigGoalList()), könnten Sie alle mit diesem ersetzen:

public static <T> List<T> getEntityList(Dao<T, Integer> dao) throws SQLException { 
    ArrayList<T> list = new ArrayList<>(); 
    CloseableIterator<T> iterator = dao.closeableIterator(); 
    try { 
     while (iterator.hasNext()){ 
      T item = iterator.next(); 
      list.add(item); 
     } 
    } finally { 
     iterator.close(); 
    } 

    return list; 
} 

ich weiß nicht genug über ORMLite y zu sagen, ou, wenn die gleiche Art von Refactoring für die Methoden funktionieren würde, die eine Entität in Ihrer Datenbank erstellen und speichern. Sie könnten diese Methoden nehmen eine Instanz der Entität als Parameter, die besser dran, anstatt alle Argumente des Nehmens verwendet, um die Einheit zu konstruieren, i, e:

createBigGoalRecord(BigGoal item, Dao<BigGoal, Integer> dao) 

statt

createBigGoalRecord(String title, String description, Dao<BigGoal, Integer> dao) 

Andernfalls Ich sehe keinen einfachen Weg, sie zu einer Methode zusammenzufassen, da sie unterschiedliche Argumente zu benötigen scheinen.

+0

Das ist genau das, wonach ich suche! Vielen Dank! –