Un progetto PySide su cui sto lavorando da un po 'di tempo ha iniziato a crescere fino a diventare abbastanza grande da dover fare un passo indietro e ripensare al design generale.
Ho passato un po 'di tempo con Flask e Django, quindi ho familiarità con il pattern di progettazione MVC concettualmente, ma ho avuto il vantaggio (o forse lo svantaggio!) di così tanti grandi esempi di come strutturare e layout Flask / Progetti di Django che non ho dovuto pensarci molto. Ora che sto provando a inserire il mio progetto in questo tipo di schema di progettazione per la prima volta, trovo difficile immaginare come dovrebbe essere tutto sistemato. Passando un po 'di tempo a leggere sul pattern MVC sono stato un po' lieto di vedere che in parte avevo intrapreso questa strada senza cercare consciamente, ma avevo reso le cose inutilmente complicate e accoppiate.
Non c'è nulla di particolarmente speciale nel mio programma: un utente interagisce con un'interfaccia utente che recupera i dati da un database per la visualizzazione o l'elaborazione.
Cercando di associarlo a una struttura MVC, ho trovato:
Controller: la maggior parte delle effettive funzionalità dell'applicazione - l'utente interagisce con un widget sull'interfaccia utente, il controller accetta questo input e esegue le operazioni appropriate - recupera i dati dal modello e li invia alla vista per visualizzarli nell'interfaccia utente, eseguire operazioni su di esso e rimandare al modello per l'aggiornamento nel database, ecc. In Qt speak, i segnali widget collegati ai metodi del controller che coinvolgono i dati di estrazione dal modello (di solito) per l'elaborazione o la vista tramite la vista.
Modello: Inserisci / aggiorna / seleziona i dati dal database come indicato dal Controller.
Visualizza: Il lavoro effettivo dell'interfaccia utente viene svolto qui - aggiornando i fogli di stile dei widget (funzione principale del programma) e anche i dati di formattazione trasmessi alla Vista dal Controller (dal Modello) come specificato dal Controller (presi da varie opzioni utente ha selezionato sull'interfaccia utente) per poi visualizzare all'utente tramite i widget dello schermo. È qui che la maggior parte delle mie singole classi di oggetti entrerebbe in gioco.
La differenza principale tra ciò che ho elencato sopra e il modo in cui ho strutturato il mio programma al momento è che i componenti Model / View erano più o meno sovrapposti, con il modello che recuperava i dati ma eseguiva anche la maggior parte della formattazione dei dati pure.
Quindi, sono sulla strada giusta qui?