2013-08-16 54 views
19

Tôi thực sự đang gặp khó khăn với toàn bộ ý tưởng ứng dụng này. Tôi đọc rất nhiều hướng dẫn và hướng dẫn phong cách và tôi biết tôi nên cố gắng tạo các ứng dụng chuyên biệt, thực hiện chính xác một điều. Tất cả điều này có ý nghĩa khi xem xét một số dự án hướng dẫn đơn giản nhưng ngay khi nó được đưa vào một dự án thực tế phức tạp, tôi thấy mình không thể xác định cách tôi nên vẽ các đường giữa các ứng dụng khác nhau.Django: thực hành tốt nhất để chia nhỏ dự án thành các ứng dụng

Một trong những vấn đề là, tôi muốn có một trang web (hoặc nhiều trang web) nơi người dùng nhìn thấy rất nhiều nội dung khác nhau. Nội dung phải từ các ứng dụng khác nhau, khi tuân thủ các quy tắc thiết kế ứng dụng. Làm thế nào tôi sẽ nhận ra một cái gì đó như thế này? Ý tưởng đầu tiên của tôi là tạo một ứng dụng gọi là ui, chỉ xử lý TẤT CẢ các lượt xem thực sự dẫn đến một mẫu và tất cả các ứng dụng khác cung cấp các mô hình và các chức năng trợ giúp. Nhưng tôi sợ rằng ứng dụng ui sẽ trở thành cách lớn.

Để cung cấp cho bạn một ví dụ nhỏ: Cho phép tôi muốn có một trang web mà người dùng có thể thực hiện các nhiệm vụ sau:

  • Chọn một chủ đề
  • thiết lập một số tùy chọn cho đối tượng được lựa chọn
  • upload các tệp được liên kết với tài khoản của mình
  • gán một số tệp đã tải lên cho chủ đề
  • ghi lại một số âm thanh sẽ liên quan đến chủ đề

Ngay bây giờ, tôi sẽ tạo ra ba ứng dụng:

  1. đối tượng (bao gồm các mô hình đối tượng và một số mô hình có liên quan)
  2. nguồn lực (bao gồm các mô hình tài nguyên, xử lý ảnh upload)
  3. âm thanh (xử lý tất cả các nội dung ghi âm và xử lý âm thanh)

Nhưng sau đó, tôi cần một số loại ứng dụng main hoặc ui để xử lý cách những ps tương tác và tạo trang web thực sự, nơi tất cả các ứng dụng đều tham gia bằng cách nào đó.

Vì vậy, có cách nào "đúng" để thực hiện việc này không? Hoặc có bất kỳ mẫu nào tôi có thể sử dụng không? Tôi cũng sẽ đánh giá cao các liên kết đến các tài nguyên tốt về chủ đề này, mặc dù tôi đã đọc khá nhiều.

Trả lời

7

Bạn chỉ cần đảm bảo cấu trúc của bạn có ý nghĩa với bạn.

Không yêu cầu tạo ứng dụng mới cho mọi tính năng được ràng buộc với một phần khác của logic của dự án.

Ứng dụng có thể sử dụng lại là một câu chuyện hoàn toàn khác, mã của họ không nên biết về việc triển khai ở một mức độ nào đó.

Hãy xem Django's structure cho cảm hứng

Một bố cục có thể cho ví dụ của bạn:

project_root/ 
    project/ 
     __init__.py 
     settings.py 
     urls.py 
     templates/ 
      app1/ # override stuff 
     static/ 
     media/ 
    app1/ 
     __init__.py 
     admin/ # as a package 
      __init__.py 
      subjects.py 
      resources.py 
      # etc 
     models/ # as a package 
      subjects.py 
      resources.py 
      # etc 
     managers/ 
      __init__.py 
      subjects.py 
      resources.py 
      # etc 
     services/ 
      __init__.py 
      audio.py # upload handler etc 
     views/ 
      __init__.py 
      subjects.py 
     urls/ 
      __init__.py 
      subjects.py 
     templates/ 
      app1/ 
       subject_list.html # override at project level 
     static/ 
      app1/ 
       css/ 
        subject.css # override at project level 
    app2/ 
     __init__.py 
     models.py # holds a Member model or whatever you require 
    manage.py 
+0

cảm ơn rất nhiều! có lẽ tôi đã đánh giá cao toàn bộ mẫu ứng dụng một chút. nhưng điều này thực sự có ý nghĩa hơn rất nhiều. Một câu hỏi đặt ra là: làm thế nào để "ghi đè ở cấp độ dự án" làm việc? Hay ý bạn là gì? – basilikum

+0

@basilikum Hệ thống kế thừa của Django sẽ tìm kiếm mẫu hoặc tệp css ở cấp độ dự án của bạn trước, sau đó truy vấn vào cấp ứng dụng, v.v. (tùy thuộc vào [thiết lập] của bạn (https://docs.djangoproject.com/en/1.5/ref/ contrib/staticfiles/# staticfiles-finders), từ trên xuống dưới) điều này được sử dụng rất nhiều khi sử dụng lại các phần của các dự án chéo mã của bạn, nơi bạn không muốn sử dụng các kiểu móc mẫu/mẫu dự án cụ thể. Lưu ý, các mô hình gói sâu yêu cầu các câu lệnh import trong tệp init và sử dụng đối số 'app_label' trên lớp' Meta' của mô hình. –

+0

Cảm ơn bạn lần nữa! Tôi đã tái cơ cấu một số mã của tôi và nó đã sạch hơn rất nhiều cho tôi. – basilikum

5

Tôi nghĩ rằng cách tốt nhất để phân định một ứng dụng tương đương với cách bạn phân định một lớp trên một Ngôn ngữ lập trình hướng đối tượng.Thay vì các biến và phương pháp, bạn nghĩ về mô hình và lượt xem tương ứng:

mô hình là trạng thái của đối tượng, chế độ xem được sử dụng để xem và tương tác với trạng thái của đối tượng.

Quy tắc chung của tôi là tạo một ứng dụng trợ giúp cho encapsulate một nhóm mô hình cụ thể? Nếu đúng như vậy thì tôi cố gắng tạo ra nó.