2013-07-22 23 views
8

Trong một dự án Django mới, tôi chỉ tự hỏi có nên sử dụng Chế độ xem dựa trên lớp (CBV) hoặc Chế độ xem dựa trên chức năng (FBV) hay không.Trong một dự án Django mới, tôi có nên sử dụng chế độ xem dựa trên Lớp học hoặc Chức năng không?

Theo Django's documentation:

quan điểm dựa trên các lớp cung cấp một cách khác để thực hiện quan điểm như Python đối tượng thay vì chức năng. Họ không thay thế quan điểm dựa trên chức năng, nhưng có sự khác biệt nhất định và lợi thế khi so sánh với quan điểm chức năng dựa trên

Mà dường như mâu thuẫn với python Zen 'Chỉ có một cách để làm điều đó'

Vì vậy, , đó là cách tốt hơn?

Cho đến nay, tôi chỉ nhìn thấy ba khả năng:

  1. Luôn luôn sử dụng FBV

    có nghĩa là không sử dụng quan điểm chung ở tất cả (như những người đang dựa trên lớp từ 1,5)

  2. Luôn sử dụng CBV:

    Có vấn đề nhất định khi xác định đơn đặt hàng xử lý yêu cầu. Xem

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

    Tôi cũng nghĩ rằng việc xây dựng hệ thống phân cấp cả lớp là không tốt cho việc thực hiện. Trong trường hợp đó tôi cũng sẽ tự hỏi mình, tại sao FBV không bị phản đối?

  3. Đưa generic CBV vào FBV, theo

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

    mà kết quả trong rất nhiều mã boilerplate độc ​​ác

Bạn có thấy bất kỳ cách nào khác, hoặc không ai biết nơi các quan điểm đang diễn ra?

+0

"không ai biết vị trí của lượt xem" - câu hỏi này không dành cho SO, nó dành cho danh sách gửi thư phát triển/IRC. –

+1

Bạn nên sử dụng cái nào có ý nghĩa nhất cho dự án của bạn. Tôi sẽ nói rằng chức năng dựa trên * generic * xem sẽ bị lỗi thời; nhưng các khung nhìn dựa trên chức năng giải quyết một vấn đề khác với các khung nhìn dựa trên lớp làm. –

+0

@GeorgeStocker: Nó không phải là một mâu thuẫn khi nói 'sử dụng cái nào có ý nghĩa nhất cho dự án của bạn [...] Tôi sẽ nói rằng các hàm wievs chung dựa trên hàm sẽ bị lỗi thời'? Vì vậy, nếu FBV sẽ trở nên lỗi thời, tôi không nên sử dụng chúng? Trong hầu hết các trường hợp, cả fbv và cbv đều đang giải quyết cùng một vấn đề, không phải là nó không thể cung cấp cả hai bằng nhau và sử dụng cả hai trong một dự án? – ProfHase85

Trả lời

3

Đây là vấn đề quan điểm, cá nhân tôi không đồng ý với Luke Plant về điều này và tôi đã yêu Class Based Views. Tôi nghĩ phần lớn sự kháng cự của cộng đồng Django để họ chấp nhận họ bắt nguồn từ thực tế là họ không thể dễ dàng thấy cách họ làm việc (việc triển khai sử dụng rất nhiều Mixins và khó có thể làm theo) và tài liệu còn thiếu, và tôi nghĩ có rất nhiều sự hiểu lầm về Chung CBV của CBV và đồng bằng. (Trong một thời gian dài khi đã bao giờ bạn google “quan điểm dựa trên lớp django” kết quả đầu tiên là về generic lượt xem)

Bây giờ các tài liệu được tiến bộ hơn nhiều và các công cụ có sẵn để giúp hiểu họ là tuyệt vời (xem ccbv.co.uk hoặc pudb).

Tôi khuyên bạn nên học và sử dụng Class Based Views vì cùng lý do mọi người đề xuất OOP, nó làm giảm sự lặp lại mã và tăng tái sử dụng mã (kế thừa, kết hợp)… nói cách khác, đó là DRY.

Một điều nữa, bạn nên kiểm tra xem các dự án khác sử dụng CBV's… một trong những mục yêu thích gần đây của tôi là django-oscar, sử dụng chúng để có hiệu quả tốt.

Các vấn đề liên quan