2013-01-08 8 views
1

J'ai besoin de quelques suggestions de conception.Conception - Où ouvrir, insérer et fermer DB?

Voici mon histoire d'utilisateur:

En tant qu'utilisateur, je veux sauver mes heures de travail dans DB pour plus tard l'examen. Je veux que ce soit simple, à partir de l'écran principal avec un clic sur un bouton. La façon dont je gère cela dans mon application est que, à partir de mon fragment d'application principale, lorsqu'un utilisateur clique sur un bouton, il fera appel à une classe de fabrique qui instanciera la bonne classe (appelez la classe «X») pour ce type de travail, et le retourner au fragment principal pour interagir avec.

Dans le constructeur de classe "X", j'établis et ouvre la connexion DB et dans l'une de ces méthodes de classe, j'insère de nouvelles données dans le DB.

Ma question est - est-ce un bon design? Aurai-je des fuites de mémoire? Y a-t-il quelque chose que je dois considérer?

J'ai joint un UML comme flux de classes de l'aide:

+-----------------+     +----------------------+ 
|MainFragment  |     |  Factory   | 
|-----------------|     |----------------------| 
|     |     | ChooseShiftObject | 
|     |+---------+----+ |      | 
| CheckIn()  |     |      | 
+-----------------+     |      | 
            +----------------------+ 
               + 
               | 
               | 
               + 
               | 
             + + 
            +-----------------------+ 
            |  Shift   | 
            |-----------------------| 
            | DB.Open()   | 
            | DB.Insert(bla, bla. bla) 
            | DB.Close()   | 
            |      | 
            |      | 
            |      | 
            +-----------------------+ 

Répondre

1

Il y a une chose que vous devez savoir sur les bases de données dans Android. Vous devez créer votre objet SQLiteOpenHelper en tant que singleton, sinon vous rencontrerez des problèmes dans un environnement multithread. Vous pouvez trouver une explication here et here pourquoi vous devez le faire.

+0

Merci, ma classe SQLiteOpenHelper est comme Reto Meir décrit dans son livre et je comprends qu'il est mis en cache. – Yosi199