2015-05-12 11 views
12

Sto cercando di creare un backend con Django Rest Framework e sto cercando di determinare dove posizionare la logica di business. Andrebbe nel views.py? Mi piacerebbe creare servizi più complessi di un semplice elenco di oggetti o di un oggetto specifico. Qualsiasi consiglio sarebbe apprezzato, grazie. Mi rendo conto che c'è una discussione sulla logica di business in un progetto Django generico, ma mi sto chiedendo in particolare riguardo al framework per il riposo di Django.Logica di business di Django Rest Framework

+1

Esiste già una grande discussione su questo: http : //stackoverflow.com/questions/12578908/separation-of-business-logic-and-data-access-in-django – Spencer

+2

Sì, ho guardato a quello, ma speravo di chiedere in particolare la posizione all'interno di Django rest framework – perp

+0

Hai trovato un buon Design Pattern per questo? Grazie – cyberjoac

risposta

10

Si tratta più di schemi di progettazione che di Django Rest Framework.

ecco alcuni suggerimenti:

  • Fornire interfacce utilizzando REST non dovrebbe comportare alcun codice specifico relativo alla manipolazione di dati o la logica di business.
  • L'utilizzo di un approccio MVC non significa che non si debba sovrapporre l'applicazione.
  • Dovresti essere in grado di testare la tua logica aziendale senza toccare l'interfaccia utente.
  • Alcune persone possono suggerire di inserire la logica di business nei modelli. Ma io non sono d'accordo con loro, dal momento che i modelli di Django sono diversi da modelli di dominio e attività correlate al business come il calcolo delle tasse.
  • Prima di rimanere bloccati in MVC, si può leggere di più su The MVC implemented in MVC three-tier architecture
  • Suggerisco di avere un livello aziendale e applicazioni correlate mettendo la vostra logica aziendale lì.

MVC + three-tier diagram

Supponiamo di avere un negozio di caffè in linea & desideri fornire un'API REST per ordinare caffè.

Qui sono i miei esempi di codice suggerito:

frontend/views.py:

def order(request, quantity=1): 
     # Process the order by calling the mapped method 
     order_id = CoffeeShopService.place_order(quantity) 
     return HttpResponse({'order_id': order_id, mimetype='application/json') 

frontend/services.py:

class CoffeeShopService(object): 
     @staticmethod 
     def place_order(quantity): 
      # do the business logic here 
      return order_id