Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-03-2012, 10:31   #1
*andre*
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
*andre* è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2012, 11:25   #2
ingframin
Senior Member
 
L'Avatar di ingframin
 
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!
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2012, 18:30   #3
*andre*
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
*andre* è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2012, 21:51   #4
*andre*
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
*andre* è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
HONOR 500 Pro, scheda tecnica confermata...
GeForce NOW si prepara a vivere un mese ...
Exynos 2600: temperature più bass...
Apple si ispirerà a Nothing? Back...
Da Intel ad AMD, il grande salto di Kulk...
Velocità 12 volte superiore a que...
Una piccola Morte Nera è gi&agrav...
Sei frodi che minacciano gli utenti nel ...
BioShock 4: Take-Two rassicura sullo svi...
Tesla, Musk promette FSD 'quasi pronto' ...
BioWare conferma: il nuovo Mass Effect &...
5 robot aspirapolvere di fascia alta in ...
Xiaomi Redmi Note 14 5G a 179€ è ...
Veri affari con gli sconti de 15% Amazon...
Tutti gli iPhone 16 128GB a 699€, 16e a ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:57.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v