Khi nào tạo ứng dụng mới (với startapp) trong Django?


102

Tôi đã tìm kiếm xung quanh cho điều này, nhưng tôi vẫn gặp sự cố liên quan đến những gì Django định nghĩa là "ứng dụng".

Tôi có nên tạo một ứng dụng mới cho từng phần chức năng trong một trang web, ngay cả khi nó sử dụng các mô hình từ dự án chính?

Các bạn có nguyên tắc chung về thời điểm tách một ứng dụng mới và khi nào giữ chức năng cùng với "dự án chính" hoặc các ứng dụng khác không?

Câu trả lời:


43

James Bennett có một bộ trang trình bày tuyệt vời về cách tổ chức các ứng dụng có thể tái sử dụng trong Django.


1
Điều đó có nghĩa là, nếu tôi tạo một mô hình con, nó phải luôn ở trong cùng một ứng dụng? Vì tôi không thể dễ dàng bỏ nó vào một dự án khác mà không đưa hơn hai "ứng dụng"
Lionel

18

Tôi thích nghĩ về các ứng dụng Django như các mô-đun hoặc thành phần có thể tái sử dụng hơn là "ứng dụng".

Điều này giúp tôi gói gọn và tách rời một số tính năng nhất định với nhau, cải thiện khả năng tái sử dụng nếu tôi quyết định chia sẻ một "ứng dụng" cụ thể với cộng đồng nói chung và khả năng bảo trì.

Cách tiếp cận chung của tôi là tập hợp các tính năng hoặc bộ tính năng cụ thể vào "ứng dụng" như thể tôi sẽ phát hành chúng công khai. Phần khó ở đây là tìm ra kích thước của mỗi cái xô.

Một mẹo hay mà tôi sử dụng là tưởng tượng các ứng dụng của tôi sẽ được sử dụng như thế nào nếu chúng được phát hành công khai. Điều này thường khuyến khích tôi thu nhỏ các xô và xác định rõ hơn "mục đích" của nó.


16

Đây là bản trình bày cập nhật vào ngày 6 tháng 9 năm 2008.

DjangoCon 2008: Ứng dụng có thể tái sử dụng @ 7: 53

Trang trình bày: Reusable_apps.pdf

Lấy từ slide

Đây có nên là ứng dụng riêng của nó không?

  • Nó hoàn toàn không liên quan đến trọng tâm của ứng dụng?
  • Nó có trực giao với bất cứ điều gì khác tôi đang làm không?
  • Tôi có cần chức năng tương tự trên các trang khác không?

Nếu bất kỳ trong số họ là "Có"? Sau đó, tốt nhất nên chia nó thành một ứng dụng riêng biệt.


Trang trình bày tôi đã xem không chứa câu hỏi đầu tiên về "tiêu điểm của ứng dụng".
johnny

@johnny Nó ở đó ở trang trình bày 31 trên 99.
Yeo

13

Tôi có xu hướng tạo các ứng dụng mới cho từng nhóm mô hình riêng biệt một cách hợp lý. ví dụ:

  • Thông tin người dùng
  • Bài đăng trên diễn đàn
  • Bài đăng trên blog

6

Quy tắc tôi tuân theo là nó phải là một ứng dụng mới nếu tôi muốn sử dụng lại chức năng trong một dự án khác.

Nếu nó cần sự hiểu biết sâu sắc về các mô hình trong dự án của bạn, thì việc gắn nó với các mô hình có lẽ sẽ gắn kết hơn.


4

Hai câu trả lời tốt nhất cho câu hỏi này mà tôi đã tìm thấy trên web là:

  1. Các ứng dụng có thể sử dụng lại Talk ( trang trình bày ) ( video ) cũng được đề cập trong các câu trả lời khác. Bennett, tác giả và cộng tác viên của Django, thường xuyên xuất bản các ứng dụng để người khác sử dụng và có quan điểm mạnh mẽ đối với nhiều ứng dụng nhỏ.
  2. Doordash's Tips for Django at Scale đưa ra lời khuyên ngược lại và cho biết trong trường hợp của họ, họ đã chuyển sang một ứng dụng duy nhất sau khi bắt đầu với nhiều ứng dụng riêng biệt. Họ gặp sự cố với biểu đồ phụ thuộc di chuyển giữa các ứng dụng.

Cả hai nguồn đều đồng ý rằng bạn nên tạo một ứng dụng riêng trong các trường hợp sau:

  • Nếu bạn dự định sử dụng lại ứng dụng của mình trong một dự án Django khác (đặc biệt nếu bạn định xuất bản ứng dụng đó để người khác sử dụng lại).
  • Nếu ứng dụng có ít hoặc không có sự phụ thuộc giữa ứng dụng và ứng dụng khác. Ở đây, bạn có thể hình dung một ứng dụng chạy như một dịch vụ vi mô của chính nó trong tương lai.

1

Một 'ứng dụng' có thể là nhiều thứ khác nhau, tất cả đều thực sự phù hợp. Ví dụ: giả sử bạn đang xây dựng một blog. Ứng dụng của bạn có thể là toàn bộ blog hoặc bạn có thể có ứng dụng 'quản trị viên', ứng dụng 'trang web' cho tất cả các chế độ xem công khai, ứng dụng 'rss', ứng dụng 'dịch vụ' để các nhà phát triển có thể giao diện với blog trong cách riêng, v.v.

Cá nhân tôi sẽ tự biến blog trở thành ứng dụng và khám phá các chức năng bên trong nó. Sau đó, blog có thể được sử dụng lại khá dễ dàng trong các trang web khác.

Điều thú vị về Django là nó sẽ nhận ra bất kỳ tệp models.py trong bất kỳ cấp nào của cây thư mục của bạn dưới dạng tệp chứa các mô hình Django. Vì vậy, việc chia nhỏ chức năng của bạn thành các 'ứng dụng con' nhỏ hơn trong bản thân 'ứng dụng' sẽ không gây khó khăn gì hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.