Python MVC-file-separation

0

Sono abituato a programmare in Java, quindi la mia visione di queste cose è piuttosto basata su Java, ma dubito che questo sia il modo corretto di scrivere codice Python. Ho trovato questo link link che chiede un domanda simile a quello che sto per chiedere.

In Python, quando si crea un'applicazione MVC, ha senso inserire tutte le classi in un unico file (modulo) dato che ciascuna parte dell'applicazione MVC è tecnicamente associata?

In Java, l'idea sarebbe sicuramente quella di dividere questi file perché potremmo voler sostituire una parte della combinazione MVC per un'altra parte. Questo è uno dei vantaggi della scrittura del codice MVC (anche se in pratica potrebbe accadere raramente). Comunque, sceglierei di creare un file per ciascuna parte del codice MVC. Una classe per il modello, la vista e il controller.

Ora, posso ottenere il raggruppamento di objectGUI, objectModel, objectController in un modulo. Come insieme formano object . Ma d'altra parte, questo sembra un po 'sbagliato dallo sfondo di Java.

Esiste una buona regola empirica per come la suddivisione in moduli funzioni effettivamente in Python. MVC è anche una cosa strong in Python? (Nella mia mente, Python è ancora principalmente per codice e script di colla).

    
posta Dylan Meeus 11.04.2017 - 22:57
fonte

2 risposte

3

In Python, un file è un'unità di importazione. Quindi ha senso mettere le cose che appartengono allo stesso file, e cose che non lo fanno, per separare i file.

Per impostazione predefinita, i framework Web come Django prevedono di inserire i modelli in models.py e le viste / i controller in views.py . Nelle applicazioni di grandi dimensioni, questi file sono effettivamente suddivisi, solitamente per area tematica. Django ti consente anche di comporre un'intera app web da diverse 'applicazioni' riutilizzabili, ognuna con una propria struttura.

È facile suddividere un file di grandi dimensioni in diversi file senza rompere il codice esistente in Python. Esporta nuovamente i nomi da un file suddiviso, in questo modo:

(views.py)

# These used to be defined here, now moved to premium_views.py 
from premium_views import FancyFeatureView, ExtraSnazzyView

class StandardView(...): ...

Ora puoi from views import FancyFeatureView , come se fosse completamente definito lì. Esiste persino un modello di file di questo tipo che solo riesporta le cose da una serie di altri moduli, in modo che questi altri moduli possano essere modificati come gli autori ritengono opportuno senza influire sul normale codice client.

Un'altra considerazione potrebbe essere test. Quello che vuoi testare in configurazioni significativamente diverse probabilmente appartiene a diversi moduli (file).

    
risposta data 11.04.2017 - 23:47
fonte
1

In python puoi usare la struttura modules per raggruppare i file per funzionalità e per controllare ciò che è normalmente a disposizione. Un modulo è una directory con diversi file python e potenzialmente sotto-moduli, e deve contenere un file __init.py__ . Questo file può essere usato per controllare l'interfaccia pubblica del modulo.

Se hai un modulo, contenente un file __init.py__ , chiamato fred allora puoi import fred e accedi ai suoi membri come fred.item_name o from fred import item_name quindi usa item_name .

È importante notare la pratica del pitone di avere, in ogni file, una sezione che inizia con:

if __name__ == "__main__":

Il codice nell'ambito di questa istruzione if verrà eseguito solo se tale file viene richiamato direttamente - ciò consente ai moduli di contenere utilità autonome eseguibili mentre sono comunque importabili come librerie da altri moduli o per fornire test standalone a livello di file o modulo.

È importante notare che quando i singoli file in un modulo o l'intero modulo vengono importati in un oggetto di livello superiore saranno byte compilati da .py a .pyc file che accelera le importazioni successive e le prestazioni generali, (alla prima importazione di qualsiasi sessione o esecuzione i timestamp sono controllati tra nomi identici di .py e .pyc per verificare se è necessaria la ricompilazione) .

    
risposta data 12.04.2017 - 08:12
fonte

Leggi altre domande sui tag