|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1071
|
[Python] Implementare MVC
Ciao ragazzi!
da tempo non posto sul forum, pero adesso mi sorge un problema. Sto cercando di realizzare un programma per gestire un semplice database SQLite e vorrei utilizzare il pattern MVC per la separazione tra logica e GUI del programma. Mi sono documentato un pò e penso di aver capito abbastanza il funzionamento dell'arquitettura, ora il problema è como la implemento? Cioè in termini di classi come posso dividere il progetto? Avete qualche riferimento o suggerimento in particolare? Conoscete qualche risorsa web dove ci sia un esempio completo di una piccola implementazione? Grazie mille!! PS: Sto utilizzando Python + PyQt4
__________________
Affari: ariakasneverborne, PanCar, Luk@°°°, Fabio310, kintaro oe, krike, fabry180384, dariox am2, chiadoz, windsofchange, dado1979, Rudyduca, aleforumista, Sheva77 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Io sto facendo esattamente la stessa cosa ma con wxPython
Sto facendo un programma che serve a costruire la mappa di memoria di un integrato e a generare automaticamente sia il file vhdl che la documentazione word. In pratica ho una classe che mi rappresenta il registro (ovvero i dati veri e propri) e una classe RegisterMap che mi serve per accedere ai dati presenti nei vari registri. Poi ho la classe MainWindow che e' la classe principale della gui fatta in wxPython e che al suo interno contiene un'istanza di RegisterMap. Infine ho una classe Parser (anch'essa con un'istanza contenuta in MainWindow) che su comando da parte della gui si legge i dati contenuti in RegisterMap e costruisce i due file in output. Parser si chiama cosi' perche' funziona facendo il parsing del file ottenuto dalla register map e costruisce il suo output facendo il parsing di altri due file che usa come template. Invece di usare un database ho usato un file di testo al momento per lasciare la possibilita' di modificare manualmente il "malloppo" di registri ma il passaggio a sqlite e' gia' in cantiere. Inoltre uno scambio di dati cosi' "limpido" mi da modo di poter cambiare le altre parti (RegisterMap e MainWindow) senza dover toccare il parser, basta che il file di testo in input al parser sia sempre strutturato correttamente (di fatto le prime prove le ho fatte scrivendolo a mano, cosi' ho potuto sviluppare le tre parti separatamente). In ogni caso i consigli sono: 1) cerca di disaccoppiare piu' possibile i vari pezzetti 2) Stabilisci delle interfacce tra i moduli e rispetta quello che stabilisci 3) Non mischiare i pezzi (niente pezzi di gui nel modello dei dati o nel controller, niente accesso al database nel controller e nella gui, niente operazioni sui dati nel modello dei dati e nella gui) 4) implementa i vari metodi "standard" nel modello dei dati (__add__, __cmp__,__str__,ecc...), ti assicuro che il tuo codice ne guadagna moltissimo sia in leggibilita' che in correttezza. 5) Se hai dei container (tipo la mia RegisterMap) non vergognarti a implementare i metodi __iter__ e next() oppure ad estendere classi base di python (molto utile dict ad esempio). 6) Fai una buona pianificazione all'inizio altrimenti diventa difficile tenere traccia di cosa hai in memoria e ti trovi incasinato quando devi cambiare schermata nella gui e conservare lo stato del programma. In bocca al lupo, se trovo il tempo di ripulirlo un po' ti mando il mio codice.
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1071
|
grazie per la risposta
In più Python lo conosco da poco, quindi mi sto ancora abituando a pensare in the Python-Way Comunque ho recuperato dalla biblioteca Head First Design Patterns e me lo sto leggendo per bene.. Guarda se non hai nulla in contrario inviami il tuo codice, così tra l'altro vedo un progetto in Python (ti mando la mia mail in PM)
__________________
Affari: ariakasneverborne, PanCar, Luk@°°°, Fabio310, kintaro oe, krike, fabry180384, dariox am2, chiadoz, windsofchange, dado1979, Rudyduca, aleforumista, Sheva77 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 1071
|
ok, ho guardato per bene l'esempio di MVC del libro Head First..
Il disegno che deve avere una semplice applicazione l'ho implementato e funziona. Il mio dubbio è, per esempio, il caso in cui ho una interfaccia grafica complessa, con tante viste e non simili tra loro. Il fatto che il Controller gestisca tutti gli input dell'utente rende quest'ultimo difficile da gestire per quanto riguarda l'aggiunta di ulteriori viste nel futuro.. Come posso codificare il caso in cui ho molte viste? Una soluzione che mi è venuta in mente è creare un Controller per ogni vista. Costruisco la finestra e i layout con il Controller e la vista principali, poi ogni vista ottiene un riferimento al proprio Controller con un metodo statico del sub-Controller (pattern Singleton). Sempre implementando Singleton tutti i controller utilizzano lo stesso modello per gestire i dati da un solo punto. Opinioni? Con questa opzione se voglio aggiungere una vista basta che creo la classe che la controlla e il widget. Di classi esistenti devo solo modificare la vista principale (inevitabile per aggiungere il widget al layout) e il modello (inevitabile visto che lo uso come punto di accesso al DB)
__________________
Affari: ariakasneverborne, PanCar, Luk@°°°, Fabio310, kintaro oe, krike, fabry180384, dariox am2, chiadoz, windsofchange, dado1979, Rudyduca, aleforumista, Sheva77 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:57.



















