Convertir un code procédurale en POO
Résolu
rasielblas
Messages postés
135
Date d'inscription
Statut
Membre
Dernière intervention
-
rasielblas Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
rasielblas Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Convertir un code procédurale en POO
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Convertir epub en kindle - Guide
3 réponses
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
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
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!