2013-07-22 13 views
8

In un nuovo progetto Django, mi chiedo solo se utilizzare le viste basate sulle classi (CBV) o le viste basate sulle funzioni (FBV).In un nuovo progetto Django, dovrei utilizzare le visualizzazioni basate su classi o su funzioni?

Secondo Django's documentation:

vista basato sulla classe forniscono un modo alternativo per implementare viste come oggetti Python invece di funzioni. Non sostituiscono vista basati su funzioni, ma hanno alcune differenze ei vantaggi rispetto alle viste basati su funzioni

che sembra contraddire a Python Zen 'C'è un solo modo per farlo'

Così , che è il modo migliore?

Finora, vedo solo tre possibilità:

  1. sempre utilizzando FBV

    Il che significa non utilizzando le visualizzazioni generiche a tutti (come quelli sono di classe a base dal 1,5)

  2. Sempre usando CBV:

    Che ha determinati problemi con la determinazione degli ordini di elaborazione delle richieste. Vedi

    http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/

    Penso anche che la costruzione della gerarchia di classi insieme non è un bene per la performance. In tal caso mi chiederei anche io, perché gli FBV non sono ancora deprecati?

  3. Mettere generico CBV in FBV, secondo

    https://gist.github.com/spookylukey/2596285

    che si traduce in un sacco di codice crudele boilerplate

Vedete altri modi, o qualcuno sa dove i punti di vista stanno andando?

+0

"qualcuno sa dove stanno andando le visualizzazioni" - questa domanda non è per SO, è per lo sviluppo di mailing list/IRC. –

+1

Dovresti usare quello che ha più senso per il tuo progetto. Dirò che le viste basate sulla funzione * generica saranno obsolete; ma le viste basate sulla funzione risolvono un problema diverso rispetto alle viste basate sulla classe. –

+0

@GeorgeStocker: Non è una contraddizione dire 'usare quello che ha più senso per il tuo progetto [...] Dirò che i wiev generici basati su funzioni saranno obsoleti'? Quindi, se l'FBV sarà obsoleto, non dovrei usarli? Nella maggior parte dei casi, sia fbv che cbv stanno affrontando lo stesso problema, non sarebbe unpythonic offrire sia uguale che usare entrambi in un progetto? – ProfHase85

risposta

3

Questa è una questione di opinione, personalmente non sono d'accordo con Luke Plant su questo e mi sono innamorato di Class Based Views. Penso che gran parte della resistenza della comunità Django ad adottarli con entusiasmo sia derivata dal fatto che non potevano vedere facilmente come funzionavano (l'implementazione usa un sacco di Mixins e può essere difficile da seguire) e la documentazione era carente, che e penso ci fosse un sacco di equivoci su Generico CBV e CBV semplici. (Per lungo tempo, quando mai si Googled “viste basate classe Django” i primi risultati sono stati circa generici visualizzazioni)

Ora la documentazione è sempre molto meglio e gli strumenti a disposizione per aiutare a capire loro sono grandi (vedi ccbv.co.uk o pudb).

Suggerisco di imparare e utilizzare Class Based Views per gli stessi motivi per cui le persone suggeriscono OOP, riduce la ripetizione del codice e aumenta il riutilizzo del codice (ereditarietà, mixaggi) ... in altre parole, è ASCIUTTO.

Un'altra cosa, vale la pena controllare come altri progetti utilizzano lo CBV ... uno dei miei preferiti recenti è django-oscar, che li utilizza con buoni risultati.

Problemi correlati