2015-05-12 29 views
12

Tôi đang cố tạo một phụ trợ với Django Rest Framework và đang cố gắng xác định vị trí đặt logic nghiệp vụ. Nó sẽ đi trong views.py? Tôi muốn tạo ra các dịch vụ phức tạp hơn là chỉ nhận được một danh sách các đối tượng hoặc lấy một đối tượng cụ thể. Mọi hướng dẫn sẽ được đánh giá cao, cảm ơn. Tôi nhận ra có một cuộc thảo luận về logic kinh doanh trong một dự án Django chung nhưng tôi yêu cầu cụ thể về khuôn khổ còn lại django.Django Rest Framework Business Logic

+1

Đã có một cuộc thảo luận lớn về vấn đề này: http : //stackoverflow.com/questions/12578908/separation-of-business-logic-and-data-access-in-django – Spencer

+2

Vâng tôi đã xem xét điều đó nhưng hy vọng sẽ hỏi cụ thể về vị trí trong khuôn khổ còn lại django – perp

+0

Bạn có tìm thấy Mẫu thiết kế tốt cho mẫu này không? Cảm ơn – cyberjoac

Trả lời

10

Đó là nhiều hơn về các mẫu thiết kế chứ không phải là khung Django Rest.

Dưới đây là một số lời khuyên:

  • Cung cấp các giao diện sử dụng REST không nên liên quan đến bất kỳ mã cụ thể liên quan đến thao tác dữ liệu hoặc logic kinh doanh.
  • Sử dụng cách tiếp cận MVC không có nghĩa là bạn không nên lớp ứng dụng của mình.
  • Bạn sẽ có thể kiểm tra logic nghiệp vụ của mình mà không cần chạm vào giao diện người dùng.
  • Một số người có thể đề xuất đặt logic nghiệp vụ trong các mô hình. Nhưng tôi không đồng ý với họ, vì các mô hình Django khác với các mô hình miền và các nhiệm vụ liên quan đến kinh doanh như tính thuế.
  • Trước khi bị kẹt trong MVC, Bạn có thể đọc thêm về The MVC implemented in MVC three-tier architecture
  • Tôi khuyên bạn nên có một lớp kinh doanh và các ứng dụng liên quan để đặt logic nghiệp vụ của bạn ở đó.

MVC + three-tier diagram

Giả sử rằng bạn có một cửa hàng cà phê trực tuyến & bạn muốn cung cấp một API REST để đặt hàng cà phê.

Dưới đây là các mẫu mã tôi đề nghị:

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 
Các vấn đề liên quan