2009-10-01 35 views
6

Tôi đang phát triển một ứng dụng bằng SQLAlchemy và wxPython mà tôi đang cố gắng phân phối trong các mô-đun riêng biệt bao gồm logic nghiệp vụ, ORM và GUI.Cách sắp xếp mã nguồn của một ứng dụng được tạo bằng SQLAlchemy và giao diện đồ họa?

Tôi không hoàn toàn chắc chắn cách thực hiện điều này theo cách nhiệt tình.

Cho rằng mapping() phải được gọi trong orther cho các đối tượng được sử dụng, tôi nghĩ đặt nó trên __init__.py của logic kinh doanh, nhưng giữ tất cả các định nghĩa bảng trong một mô-đun riêng biệt orm.py.

Tôi có nên giữ cái gì đó như:

/Business 
    /__init__.py 
    | mapping (module1.Class1, orm.table1) 
    | 
    /module1.py 
     Class1 

/orm.py 
    import 
    table1 = Table() 
/GUI 
    /main.py 
    | import business 
    /crud.py 

hoặc một cái gì đó giống như

/Business 
    /__init__.py 
    | import 
    | 
    /module1.py 
     Class1 
     table1 = Table() 
     mapping (module1.Class1, orm.table1) 

/GUI 
    /main.py 
    | import business 
    /crud.py 

là phương pháp đầu tiên được đề nghị? Có lựa chọn nào khác? Tôi đã nhìn thấy cách thứ hai, nhưng tôi không thích đặt mã xử lý cơ sở dữ liệu và mã logic kinh doanh trong cùng một mô-đun. Tôi có bị lật đổ không? Thực sự không phải là một vấn đề lớn?

+0

Dường như câu hỏi này có thể chạm vào nhiều hơn chỉ SQLAlchemy - bất kỳ thực hành tốt nhất nào về cách tổ chức mã dự án giao diện đáng kể với cơ sở dữ liệu? – ariddell

+0

@aridell: bạn có thể đúng, nhưng SQLAlchemy có một cách cụ thể để thiết lập ánh xạ, có thể hoặc có thể không khác với cách ORM hiện có hoặc ORM tùy chỉnh thực hiện. Nhưng chắc chắn nó không phải wxPython cụ thể. – voyager

Trả lời

5

Tôi tìm thấy this document bởi Jp Calderone là một mẹo tuyệt vời về cách (không) cấu trúc dự án python của bạn. Theo dõi nó, bạn sẽ không gặp vấn đề gì. Tôi sẽ mô phỏng lại toàn bộ văn bản ở đây:

Filesystem cấu trúc của một dự án Python

Do:

  • tên thư mục một cái gì đó liên quan đến dự án của bạn. Ví dụ: nếu dự án của bạn có tên là "Xoắn", hãy đặt tên cho thư mục cấp cao nhất cho các tệp nguồn nguồn của mình Twisted. Khi bạn phát hành , bạn nên bao gồm một hậu tố số phiên bản: Twisted-2.5.
  • tạo thư mục Twisted/bin và đặt các tệp thi hành của bạn ở đó, nếu bạn có bất kỳ thông tin nào. Không cung cấp cho họ tiện ích mở rộng .py , ngay cả khi chúng là các tệp nguồn Python . Không đặt bất kỳ mã nào trong chúng ngoại trừ việc nhập và gọi đến một hàm chính được xác định ở một nơi khác trong các dự án của bạn.
  • Nếu dự án của bạn được thể hiện dưới dạng một tệp nguồn đơn lẻ , sau đó đặt nó vào thư mục và đặt tên nó là liên quan đến dự án của bạn. Ví dụ: Twisted/twisted.py. Nếu bạn cần nhiều tệp nguồn, hãy tạo gói thay thế (Twisted/twisted/, bằng cách trống Twisted/twisted/__init__.py) và đặt các tệp nguồn của bạn vào đó. Đối với ví dụ , Twisted/twisted/internet.py.
  • đặt kiểm tra đơn vị của bạn trong một tiểu gói gói của bạn (lưu ý - điều này có nghĩa rằng tập tin tùy chọn nguồn Python đơn trên là một thủ thuật - bạn luôn cần ít ít nhất một tập tin khác cho đơn vị của bạn kiểm tra). Ví dụ: Twisted/twisted/test/. Tất nhiên, đặt gói đó là Twisted/twisted/test/__init__.py. Đặt các thử nghiệm vào các tệp như Twisted/twisted/test/test_internet.py.
  • thêm Twisted/README và T wisted/setup.py để giải thích và cài đặt phần mềm của bạn, tương ứng, nếu bạn cảm thấy thoải mái.

Đừng:

  • đưa nguồn của bạn trong một thư mục gọi src hoặc lib. Điều này làm cho nó khó khăn để chạy mà không cần cài đặt.
  • đặt các thử nghiệm của bạn bên ngoài gói Python . Điều này khiến việc chạy thử nghiệm khó khăn so với phiên bản đã cài đặt.
  • tạo một gói chỉ có __init__.py và sau đó đặt tất cả mã của bạn vào __init__.py. Chỉ cần tạo mô-đun thay vì gói, nó đơn giản là .
  • cố gắng đưa ra hacks huyền diệu để làm cho Python thể import module hoặc gói của bạn mà không có sử dụng thêm các thư mục chứa nó để con đường nhập khẩu của họ (hoặc thông qua PYTHONPATH hoặc một số cơ chế khác). Bạn sẽ không chính xác xử lý tất cả các trường hợp và người dùng sẽ nhận được tức giận với bạn khi phần mềm của bạn không hoạt động trong môi trường của họ.
+0

Được bình chọn là một hướng dẫn tốt. Tôi hạnh phúc vì nó khá gần với thiết kế cảm giác ruột của tôi (tm). – voyager

+2

điều này có vẻ như là lời khuyên chung chung nhưng dường như không trả lời được câu hỏi gốc hoàn toàn. – leonigmig

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