11

Utilizzo Django da molti anni (da Django 1.2). e in passato, ho utilizzato diversi tipi di framework web (come CakePHP, Rails, ASP.NET MVC e alcuni altri framework full stack). Django non era il mio primo quadro.Modello quadro simile a Django

Diversi quadri hanno differenze nei loro approcci e benefici. Ci sono alcune parti di quelle strutture che mi piacciono e io no. In questo contesto, mi piacerebbe guardare il design di Django Framework in modo più specifico.

Dopo il passaggio a Django, mi piace come progetta la struttura. Quando apprendo una nuova lingua (come Go, Scala, Ruby, Haskell), cerco di cercare una struttura che abbia qualche somiglianza nel suo design, specialmente quelli che ho menzionato in seguito.

Di seguito sono il Django decisione 2 disegno quadro che è molto diversa:

  • si incoraggiano applicazioni plug o applicazioni riusabilità. Quindi:
  • utilizza Model View Template invece di MVC classica:
    • menzionato in FAQ.
    • vista descrive quali dati sono presentati
    • modello descrive come i dati vengono presentati
    • una vista normalmente delegati a un modello
    • regolatore è probabilmente il framework stesso: il macchinario che invia una richiesta alla vista appropriata, in base alla configurazione dell'URL di Django.

non crederei che Django pionieri tali caratteristiche. Ho creduto che questo modello fosse molto comune in Framework Design. Solo che non ne ho idea, come si chiama questo modello? Questo concetto è molto utile per essere applicato in altri contesti. Credevo che conoscere il nome del modello potesse aiutarmi a capire o persino costruire un nuovo framework su un linguaggio diverso con lo stesso concetto.

Attualmente ci sono tonnellate di framework web, molti dei quali seguono il classico pattern MVC. Alcuni usano il concetto di plugin per aggiungere determinate funzionalità. Il plugin tuttavia risolve la riusabilità in un approccio diverso a seconda del contesto.

Così ho cercato di imparare il maggior numero possibile di framework per trovare un framework alternativo in diverse lingue. Sperando di poter scoprire il modello che Django usa.Tuttavia, è molto difficile per me imparare all of them. In effetti, non ne ho trovato uno finora.

Sono stato alla ricerca di:

Sfortunatamente, nessuno di loro veramente evidenzia il concetto a cui sono interessato.

In questo Q & A, vorrei sapere che cosa chiamano tale quadro le persone? (O quale pattern è utilizzato da Django?) Sarebbe bello se potessi dare un riferimento in questo progetto che altri framework avrebbero potuto usare anche tu?

+0

Non cadere in questo confronto come piacere. In verità ho cercato questo modello, ma ho scoperto che non tutte le lingue danno la stessa esperienza e il medesimo potere espressivo di un altro. PHP è diverso da Ruby e Scala è diverso da Go. Anche le loro strutture saranno diverse. Django è unico per quello che è. –

+0

@FanisDespoudis, concordiamo sul fatto che non dovremmo trovare un singolo quadro di verità, una struttura diversa ha capacità diverse. Inoltre servono meglio in diversi domini. Solo che questa domanda ha lo scopo di apprendere il modello, in modo da poter applicare a domini diversi. – Yeo

+0

Non sono sicuro del motivo per cui questi downvoters debbano sottovalutare questa domanda. Spero che non confrontiamo le strutture migliori. Ma piuttosto impariamo ciò che potremmo da diversi quadri. La domanda – Yeo

risposta

1

Di cosa si tratta che non è possibile fare in altre lingue?

  • è l'accesso al database o ai modelli? - no, python ha anche SQLAlchemy; rubino ha Active Record ...
  • è il punto di vista o il framework web? - no, è possibile fornire viste con , Pyramid, rails, php ...
  • è il sistema di template? - no, hai anche Jinja; mustache, Liquid ...
  • è il pacchetto di contributi admin? - no, hai phpmyadmin, workbench ...
  • è un insieme di librerie per semplificare lo sviluppo? un kit di strumenti?

django ha un grande utensili, molti pacchetti che è possibile utilizzare; è una piattaforma , il che significa che ha abbastanza di un nucleo per essere il punto di partenza di molti progetti, e abbastanza comunità dietro di esso per avere molti pacchetti per rendere l'integrazione in una soluzione chiavi in ​​mano un gioco da ragazzi.

django utilizza il principio DRY (Don't Repeat Yourself) come filosofia di progettazione. Dal punto di riusabilità, mantenere chiare le responsabilità per ogni pezzo/app facilita il riutilizzo dei componenti. Ma ciò non richiede una piattaforma ben progettata; l'enfasi dovrebbe essere sui componenti che sono scritti in modo da essere riutilizzati. Per esempio. di tagging generica, di configurazione/componenti data-driven ...

+0

Sono interessato alla riusabilità dell'app. Sono d'accordo con gli aspetti che hai evidenziato. Sono comuni nella maggior parte dei framework, ma non nella riusabilità dell'app. Hai sentito parlare di [Flask-blueprint] (http://flask.pocoo.org/docs/latest/blueprints/). Sta anche usando lo stesso schema delle app Django. – Yeo

+0

se intendi il principio ** ASCIUTTO ** (non ripetere te stesso), sì, 'django' usa quel principio come linea guida/filosofia del design. – dnozay

+0

Bello. Un punto: non paragonerei Django 'admin' a' phpmyadmin' o 'workbench', anche se non sono nemmeno vicini. – Wtower

2

Guardando Django design philosophies

Credo che usano/combinare un sacco di diversi modelli di progettazione che cercano di soddisfare le filosofie. È difficile mappare un singolo concetto.

Suggerimento è quello di guardare Software Design Pattern e dovrebbe essere possibile identificare molti modelli sono utilizzati in Django. Molti modelli sono ovviamente comuni anche in altri framework.

Per esempio (modelli più o meno utilizzato):

  • modelform_factory mappe per "Builder"
  • QuerySet possono essere mappati "inizializzazione differita"
  • L'ORM/database mappato a "Adapter"
+0

Grazie per aver fornito alcuni esempi di come gli schemi di progettazione sono applicati e mappati in diverse parti di Django internamente. Ho incluso alcuni riferimenti al codice sorgente di django nei tuoi esempi. – Yeo

0

Django è MVC.

MVC è un modello non è necessario applicare regole rigide. Il modello cerca di dare una soluzione comunemente accettata a un problema frequente. Il problema è "Come organizzare correttamente un framework web" e la soluzione è "separando i dati, la logica e l'interfaccia utente" in moduli significativi.

Quindi Django è MVC. Django separa logicamente questi concetti (e molti altri) in moduli. Questo è ciò che conta IMO. vista Django non è lo stesso di vista MVC, ma ... poteto potato ...

Chi applicazione riutilizzabilità:

Django è Il framework web per i perfezionisti (...) e perfezionisti (o semplicemente buoni sviluppatori) scrivono codice riutilizzabile. Questo è espresso da Django DRY philosophy e si materializza nelle app di Django.

Sono abbastanza sicuro che è possibile progettare componenti simili alle app con altri framework web. Naturalmente, dal app sono nella natura di Django da molti anni, ha un supporto molto migliore!

Problemi correlati