Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
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


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
L'ultima puntata di Falsissimo rimossa d...
NASA Perseverance ha utilizzato percorsi...
Blue Origin sospende per almeno due anni...
Stampanti, Los Angeles verso il divieto ...
Roscosmos Amur: il razzo spaziale riutil...
Robot aspirapolvere per tutte le tasche:...
Accedere alle mail di un lavoratore lice...
Amazon Haul scatenato: migliaia di prodo...
Amazon Seconda Mano rilancia: sconto ext...
Super prezzo Amazon per ECOVACS DEEBOT T...
NVIDIA Shield TV: dieci anni di aggiorna...
Le 10 offerte migliori su Amazon oggi, c...
Autostrade che 'pensano': l'AI arriva su...
AMD alza l'asticella: Zen 6 è la ...
Il satellite spia russo Olymp-1 si &egra...
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: 13:12.


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