Ce quil faut inclure dans une classe de base de données
On février 15, 2021 by admin Je développe actuellement une application Java, qui communiquera avec un serveur SQL. Par conséquent, jai créé la classe Database
qui est responsable de open()
et close()
.
Je veux pouvoir ajouter des données à la base de données. Dans cet exemple, la table sappelle job. Jai donc créé une classe Job
. Outre ces jobs, il y aura (beaucoup) de choses différentes, qui seront stockées dans la base de données. Ma question est: Où dois-je mettre ma méthode addJob(Job j)
? Jusquà présent, je peux penser à trois solutions possibles:
-
Ajoutez la méthode
addJob(Job j)
auDatabase
classe qui fournit une abstraction pour le reste du programme. Le reste du programme na pas à se soucier de la façon dont cela est mis en œuvre. Linconvénient est queDatabase
finira par devenir très volumineux. -
Créez une classe distincte
JobHandler
avec le constructeurpublic JobHandler(Database d)
qui accepte une base de données. Dans ceJobHandler
je prévois de fournir leaddJob(Job j)
. Mon problème est ici, à quel niveau dois-je interagir avec leDatabase
car il ny a actuellement aucune méthode publique saufopen()
etclose()
. Dois-je créer une méthode qui accepte les instructions SQL pures? Cela ne me semble pas très bien. -
Rendre la classe
Database
abstraite et létendre pour que jimplémente les méthodes manquantes ici . Linconvénient est que je ne peux pas transmettre la base de données et utiliser la même connexion pour plusieurs requêtes de différents types.
Que ferait-on pour résoudre ce problème? Comment dois-je structurer mes classes pour quelles ne deviennent pas trop volumineuses et que pas trop de la classe de base de données ne doive être exposée aux classes qui implémentent les méthodes pour traiter les données?
Modifier Veuillez noter que le job est une classe aléatoire, qui ne doit servir que dexemple pour les données stockées dans la base de données.
Commentaires
- » Que ferait-on pour résoudre ce problème? » Il y a environ 9001 bibliothèques matures qui font exactement tout cela. Utilisez-en une.
- Pouvez-vous sil vous plaît me donner un exemple pour une telle bibliothèque. Jaimerais lexaminer.
- Que voulez-vous dire par Job étant juste un exemple de données?
- Jai reformulé la phrase.
- Ensuite, trouvez un meilleur exemple, sinon les gens penseront que problème concerne les travaux de base de données (tâches planifiées), indépendamment de la lecture de la modification explicative. La question est également trop br oad et / ou pas clair.
Réponse
La question est très déroutante. Ce qui rend plus déroutant est le fait que vous avez décidé dutiliser Job et Jobhandler comme exemples, ce qui fait penser que la question concerne les tâches de base de données (tâches planifiées). Mais après avoir lu la modification, je suppose que vous essayez décrire un DAO et que vous parliez demplois comme dun « poste de travail ».
Nécrivez pas une classe de base de données. Créez simplement une connexion JDBC et passez-la au DAO.
Vous pouvez soit essayer décrire un DAO générique, soit écrire des DAO individuels pour chaque entité. Les DAO auront SQL des phrases à lintérieur.
Un autre modèle est Modèle denregistrement actif .
Les DAO accèdent aux bases de données, encapsulent SQL et vous permettent pour remplir les objets métier. Les DAO peuvent également avoir des méthodes qui renvoient des listes de données.
Active Record est généralement utilisé pour implémenter des objets métier qui gèrent lécriture et la lecture de leurs données à partir de la base de données eux-mêmes. Ceci est considéré comme trop puisque les classes ne devraient pas gérer leur propre persistance. Les enregistrements actifs représentent une seule ligne dun tableau.
Cette question sur la refactorisation dun enregistrement actif en formulaire DAO vous aidera car elle a un exemple complet dun objet qui accède aux bases de données et insère ou met à jour et ses réponses expliquent comment implémenter DAO à la place.
Commentaires
- Vous pouvez mentionner ORM frameworks également.
- @COMEFROM OP est un débutant. Il doit apprendre à nager avant de conduire un jet ski. Les ORM sont incroyablement complexes.
- Merci pour votre réponse. Je fais référence à » il suffit de créer une connexion à la base de données « . Cela signifierait créer une connexion dans la classe principale avec toute la gestion des erreurs, etc.? Cela ‘ ne serait-il pas en conflit avec le principe de responsabilité unique?
- La classe principale ne ‘ t typiquement SRP car il prépare généralement les conditions préalables, lit les fichiers de configuration, etc., ouvre la fenêtre principale dans le cas des applications GUI, ou tout au moins appelle les méthodes qui le font, son but est dêtre un point dentrée pour lapplication. Vous pouvez créer une fonction qui renvoie une connexion et lappeler depuis main ou vous pouvez demander une connexion à un gestionnaire de pool de connexions si vous utilisez un conteneur Web prenant en charge les pools de connexions, etc.
Laisser un commentaire