Convertir un code procédurale en POO
Résolu/Fermé
rasielblas
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
-
21 févr. 2020 à 13:43
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 25 févr. 2020 à 13:46
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 25 févr. 2020 à 13:46
A voir également:
- Convertir un code procédurale en POO
- Convertir youtube en mp3 avec audacity - Guide
- Code asci - Guide
- Code puk bloqué - Guide
- Convertir pdf en word excel gratuit - Guide
- Code telephone oublié - Guide
3 réponses
mamiemando
Messages postés
33076
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 avril 2024
7 748
23 févr. 2020 à 14:01
23 févr. 2020 à 14:01
Bonjour,
À mon avis ce sont surtout deux classes séparées. Voir les préceptes du modèle MVC (Modèle Vue Contrôleur). Si tu respectes une telle architecture, il devient facile d'interchanger sqlite par un autre système de base de données (e.g. mysql ou postgresql).
Donc à mon avis, ton problème est plutôt, comment transformer en objet ton modèle (l'accès à ta base de données). D'un point de vue objets, il faut distinguer l'objet qui permet de te connecter/identifier à la base de la classe qui va envelopper une table de ta base de données. Aujourd'hui dans ton code la connexion et la requête ne sont pas séparées, mais c'est ce qui devrait être fait.
Pour la même raison, la vue (donc la fenêtre) et le cœur du programme sont supposés être deux bouts de code séparés (ce qui permet par exemple de passer à une vue web sans avoir tout à changer).
En effet, si tu manipules plusieurs tables, il n'y a aucune raison de se connecter et reconnecter à chaque requête. On ouvre une connexion au début de la transaction (par exemple au lancement de l'application), et on ferme une fois qu'on a fini (par exemple à la fermeture).
Bonne chance
À mon avis ce sont surtout deux classes séparées. Voir les préceptes du modèle MVC (Modèle Vue Contrôleur). Si tu respectes une telle architecture, il devient facile d'interchanger sqlite par un autre système de base de données (e.g. mysql ou postgresql).
Donc à mon avis, ton problème est plutôt, comment transformer en objet ton modèle (l'accès à ta base de données). D'un point de vue objets, il faut distinguer l'objet qui permet de te connecter/identifier à la base de la classe qui va envelopper une table de ta base de données. Aujourd'hui dans ton code la connexion et la requête ne sont pas séparées, mais c'est ce qui devrait être fait.
Pour la même raison, la vue (donc la fenêtre) et le cœur du programme sont supposés être deux bouts de code séparés (ce qui permet par exemple de passer à une vue web sans avoir tout à changer).
En effet, si tu manipules plusieurs tables, il n'y a aucune raison de se connecter et reconnecter à chaque requête. On ouvre une connexion au début de la transaction (par exemple au lancement de l'application), et on ferme une fois qu'on a fini (par exemple à la fermeture).
Bonne chance
mamiemando
Messages postés
33076
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 avril 2024
7 748
24 févr. 2020 à 11:16
24 févr. 2020 à 11:16
Voilà à quoi ça pourrait ressembler
class SqlLiteConnector: # ~ Model def __init__(self): self.con = None def connect(self, path): self.con = sqlite3.connect(path) def create(self): # Ton code de création de base de donnée def get_table_dif(self, db_name): # Ton code dans la boucle for de table_dif class Ui_MainWindow: # En gros la même chose sauf loadData qui sera déporté class Controller: def __init__(self): # Code de ton main hormis la partie sur sys.argv # Creation de SqlLiteConnector, connection # Creation de Ui_MainWindow # loadData depuis SqlLiteData # Passage de ces données vers Ui_MainWindow def loadData(self): # Voir ton loadData
rasielblas
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
9
25 févr. 2020 à 13:46
25 févr. 2020 à 13:46
Merci! je vais essayé de structuré mon code avec, c'est vrai que c'est beaucoup mieux!
rasielblas
Messages postés
140
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
9
24 févr. 2020 à 07:04
24 févr. 2020 à 07:04
Merci de votre aide, est j'ai justement l'intention de m'orienter vers le structure MVC mais pour l'instant cela semble très complexe, en attendant j'aimerais juste mettre la fonction create_base() et la fonction tables_dif(*db_names) dans la class Ui_MainWindow(object). Avec un peu de ligne de code cela m'aiderais beaucoup si c'est possible.
Cordialement!
Cordialement!