2015-05-12 75 views
12

Próbuję utworzyć backend z Django Rest Framework i próbuję ustalić, gdzie umieścić logikę biznesową. Czy obejrzałby plik views.py? Chciałbym tworzyć bardziej złożone usługi niż tylko uzyskiwanie listy obiektów lub chwytanie jednego konkretnego obiektu. Wszelkie wskazówki będą mile widziane, dziękuję. Zdaję sobie sprawę, że istnieje dyskusja na temat logiki biznesowej w ogólnym projekcie Django, ale ja pytam konkretnie o framework reszta django.Django Rest Framework Business Logic

+1

Jest już duża dyskusja na ten temat: http : //stackoverflow.com/questions/12578908/separation-of-business-logic-and-data-access-in-django – Spencer

+2

Tak, spojrzałem na to, ale miałem nadzieję, że zapytam konkretnie o lokalizację w strukturze django rest – perp

+0

Czy znalazłeś dobry wzór projektu dla tego? Dzięki – cyberjoac

Odpowiedz

10

Chodzi raczej o wzorce projektowe niż Django Rest Framework.

Oto kilka wskazówek:

  • Zapewnienie interfejsów za pomocą reszta nie powinna pociągać za sobą żadnego konkretnego kodu związanego z manipulacją danych lub logiki biznesowej.
  • Stosowanie podejścia MVC nie oznacza, że ​​nie należy warstwować aplikacji.
  • Powinieneś być w stanie przetestować swoją logikę biznesową bez dotykania interfejsu użytkownika w ogóle.
  • Niektóre osoby mogą sugerować umieszczanie logiki biznesowej w modelach. Ale nie zgadzam się z nimi, ponieważ modele Django różnią się od modeli domenowych i zadań związanych z biznesem, takich jak obliczanie podatków.
  • Zanim utkniesz w MVC, możesz przeczytać więcej o The MVC implemented in MVC three-tier architecture
  • Proponuję, aby mieć warstwę biznesową i powiązane aplikacje umieszczające tam swoją logikę biznesową.

MVC + three-tier diagram

Załóżmy, że masz internetowego kawiarnia & którą chcesz zapewnić REST API do zamawiania kawy.

Oto moje sugerowane próbki kodu:

myapp/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') 

myapp/services.py:

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