Domanda

Sto creando un'applicazione Python e voglio implementarla pensando a MVC.Avrei usato pubsub per raggiungere questo obiettivo, ma mi sono imbattuto in PureMVC.

Qualcuno potrebbe spiegarmi queste due cose, le differenze tra loro e le implicazioni dell'utilizzo dell'una rispetto all'altra.

È stato utile?

Soluzione

Presumo ti riferisca a pypubsub di cui so molto (ne sono l'autore ;).Comunque non ne so molto PureMVC per Python.

I due sono molto diversi, in base ai documenti PureMVC.Ecco alcune differenze che penso possano essere importanti nella scelta, in base alla navigazione dei documenti e all'ascolto della presentazione:

  • Curva di apprendimento:
    • Incorporare pypubsub nella tua app è semplice:decidere gli "argomenti dei messaggi", sottoscrivere metodi e funzioni, aggiungere messaggi di invio per tali argomenti.Il trasporto dei messaggi a destinazione è automatico.L'API "velocità di crociera" è piccola:hai pub.subscribe E pub.sendMessage imparare e basta.
    • con PureMVC devi conoscere mediatori, comandi, proxy, ecc.Questi sono tutti concetti potenti con funzionalità significative che dovrai apprendere in anticipo.Potrebbe anche essere necessario scrivere un paio di app prima di passare dalla "conoscenza" del loro scopo alla "comprensione" quando/come usarle.Per un'app unica, a volte ne varrà la pena.Molto probabilmente ne vale la pena se crei molte applicazioni che utilizzano il framework.
  • Impatto sulla progettazione dell'applicazione:
    • PyPubsub:modello di progettazione dell'osservatore anonimo.
    • PureMVC:Modello architettonico MVC.
    • Non ci sono classi da utilizzare con pypubsub "uso standard".Per lo più devi classificare i tuoi messaggi in argomenti e decidere cosa includere come dati.Questo può evolversi in modo abbastanza organico:hai bisogno di una nuova finestra di dialogo e devi rendere disponibile parte del suo stato in modo che quando cambi un campo, un'etichetta cambia da qualche altra parte:tutto quello che devi fare è includere una pubblicazione nella finestra di dialogo e una sottoscrizione nel codice che aggiorna l'etichetta.Semmai, pypubsub ti permette di non preoccuparti del design;o meglio, ti consente di concentrare la progettazione sulla funzionalità piuttosto che su come trasferire i dati da un luogo a un altro.
    • Con PureMVC ci sono molte classi da utilizzare, richiedono che tu progetti i tuoi componenti per derivarne, registrarli e implementare la funzionalità della classe base.Non è ovvio che sia possibile pubblicare facilmente i dati da un punto dell'applicazione e acquisirli in un altro senza creare diverse nuove classi e implementarle in modo che facciano la cosa giusta quando chiamate dal framework.Naturalmente, in alcuni casi ne varrà la pena.
  • Riutilizzabilità:
    • Finché un componente documenta quali argomenti dei messaggi pubblica e cosa ascolta, può essere incorporato in un'altra applicazione, testato per il comportamento, ecc.Se l'altra applicazione non utilizza pypubsub, è facile aggiungerlo, non vi è alcun impatto sull'architettura.Non tutta un'applicazione deve utilizzare pubsub, può essere utilizzato solo dove necessario.
    • OTOH un componente PureMVC può essere incorporato solo in un'applicazione già basata su PureMVC.
  • Testabilità:
    • PureMVC facilita i test separando le preoccupazioni tra i livelli:immagini, logica, dati.
    • Mentre pubblicare-sottoscrivere (pypubsub) lo facilita separando editori e consumatori, indipendentemente dal livello.Quindi testare con pypubsub consiste nel far sì che il test pubblichi i dati utilizzati dal tuo componente e si iscriva ai dati pubblicati dal tuo componente.Mentre con PureMVC il test dovrebbe fingere di essere livelli visivi e dati.Non so quanto sia facile in PureMVC.
    • Può diventare difficile eseguire il debug di ogni sistema di pubblicazione-sottoscrizione senza gli strumenti giusti, una volta che l'applicazione raggiunge una certa dimensione:può essere difficile tracciare il percorso dei messaggi.Pypubsub fornisce classi che aiutano in questo (da utilizzare durante lo sviluppo) e funzionalità che verificano se editori e ascoltatori sono compatibili.
    • Mi sembra sulla base dei diagrammi PureMVC che potrebbero sorgere problemi simili:dovresti tracciare la tua strada attraverso proxy, comandi e mediatori, attraverso facciate, per capire perché qualcosa è andato storto.Non so quali strumenti fornisce PureMVC per gestire questo problema.
  • Scopo:
    • Il modello dell'osservatore riguarda come ottenere dati da un luogo a quello successivo tramite una sorta di "bus dati";finché i componenti possono collegarsi al bus, lo stato può essere scambiato senza conoscere la sorgente o il sink.
    • PureMVC è un modello architetturale:il suo compito è semplificare la descrizione dell'applicazione in termini di aspetti di visualizzazione, controllo e dati.Al modello non interessa come il controllo interagisce con esso;al controllo non interessa come viene visualizzato;ma la vista ha bisogno che il controllo fornisca servizi specifici per gestire le azioni dell'utente e per ottenere il sottoinsieme di dati desiderato da mostrare (poiché in genere non vengono mostrati tutti i dati disponibili), e il controllo ha bisogno che il modello fornisca servizi specifici (per ottenere dati, modificare convalidarlo, salvarlo, ecc.) e il controllo deve istanziare i componenti della vista al momento giusto.
  • Esclusione reciproca:non c'è motivo a cui riesco a pensare, in base ai documenti, che impedirebbe l'utilizzo delle due librerie nella stessa applicazione.Lavorano a livelli diversi, hanno scopi diversi e possono coesistere.

Tutte le strategie di disaccoppiamento hanno pro e contro e devi valutarli ciascuno.Curva di apprendimento, ritorno sull'investimento, riutilizzabilità, prestazioni, testabilità, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top