2011-06-21 37 views
13

Vì vậy, tôi đã hoàn thành phân tích OO và thiết kế ứng dụng web mà tôi đang xây dựng và hiện đang được triển khai. Các quyết định thiết kế đã được thực hiện để thực hiện hệ thống bằng cách sử dụng Python và khung phát triển web Django.Phân tách các lớp miền từ Lớp mô hình Django

Tôi muốn bắt đầu triển khai một số lớp thực thể tên miền cần kiên trì. Có vẻ như Django sẽ có tôi thực hiện các lớp học được thừa kế từ các lớp mô hình Django để sử dụng ORM Django cho sự kiên trì. Tuy nhiên, điều này có vẻ như sự liên kết quá mạnh giữa các thực thể lớp của tôi và cơ chế kiên trì. Điều gì sẽ xảy ra nếu ở một giai đoạn nào đó tôi muốn bỏ mặc Django và sử dụng một khung phát triển web khác, hoặc chỉ bỏ qua ORM của Django để thay thế? Bây giờ tôi phải viết lại các lớp thực thể miền của mình từ đầu. Vì vậy sẽ tốt hơn nếu triển khai các lớp miền của tôi dưới dạng các lớp Python độc lập, đóng gói tất cả logic nghiệp vụ của chúng tôi, sau đó sử dụng một số cơ chế (mẫu thiết kế như cầu nối hoặc bộ điều hợp hoặc ???) các lớp miền này cho ORM Django, ví dụ thông qua một lớp mô hình Django đã được thiết lập phù hợp cho điều này.

Có ai có đề xuất về cách thực hiện việc này không? Có vẻ như từ tất cả tôi đã đọc mà mọi người chỉ đơn giản là thực hiện các lớp miền của họ như là các lớp kế thừa từ lớp mô hình Django và có logic kinh doanh hỗn hợp trong lớp này. Điều này dường như không phải là ý tưởng tốt cho những thay đổi về đường dây, bảo trì, khả năng sử dụng lại, vv ..

Trả lời

3

Vâng, cách đi với Django là kế thừa từ các lớp mô hình cơ sở của Django. Đây là mẫu 'bản ghi hoạt động'. Mô hình django của bạn sẽ có tất cả các phương pháp truy vấn và CRUD cùng với bạn logic kinh doanh (nếu bạn quyết định để thêm nó tất nhiên). Đây được xem là một mô hình chống trong thế giới java, nhưng điều thú vị về nó là nó có thể tăng tốc độ phát triển thực sự rất nhanh.

4

Bạn có thể nghiêm túc dự tính khả năng bạn sẽ chỉ bỏ qua ORB Django, nhưng giữ mọi thứ khác? Hoặc rằng nếu bạn bỏ hoàn toàn Django, mọi mã số của bạn vẫn sẽ được áp dụng?

Bạn không phàn nàn rằng nếu bạn bỏ rơi Django, bạn sẽ phải viết lại tất cả các mẫu của mình. Tất nhiên bạn sẽ, đó là để được mong đợi. Vì vậy, tại sao nó OK cho lớp trình bày được ràng buộc với khuôn khổ, nhưng không phải là lớp kiên trì?

Loại phân tích vượt trội phía trước này cần tránh. Django là một công cụ RAD, và là phù hợp nhất để phát triển nhanh chóng, lặp đi lặp lại. Đối với tất cả những điều đó, nó có khả năng xây dựng một số ứng dụng mạnh mẽ, lâu dài, như nhiều công ty lớn sẽ làm chứng. Nhưng nó không phải Java, và nó không phải là "enterprisey", và nó không phù hợp đặc biệt tốt với các nguyên tắc OO. Trong thế giới Python, đó được xem như một tính năng, không phải là một lỗi.

+1

Nó sẽ là một câu trả lời tốt hơn nếu bạn giải thích tại sao đó sẽ là một tính năng chứ không phải là một lỗi. Tôi yêu Python, nhưng sự kết luận của Django về các khái niệm khác nhau không phải lúc nào cũng là một chiến thắng. – AdamC

0

Bạn sẽ không phải "viết lại mô hình của mình từ đầu" nếu bạn muốn có cơ chế kiên trì khác. Toàn bộ điểm của một hệ thống kiên trì kiểu activerecord là nó áp đặt các ràng buộc tối thiểu trên các lớp mô hình và hoạt động chủ yếu trong suốt.

Nếu bạn thực sự lo lắng, hãy trừu tượng hóa bất kỳ mã nào dựa trên truy vấn vào các phương pháp riêng của chúng.

-1

Tôi nghĩ rằng không có giải pháp được triển khai nào để tách mô hình Django và các lớp miền, ít nhất là tôi chưa tìm thấy bất kỳ giải pháp nào. Trong thực tế, ORM duy nhất với tách như vậy mà tôi biết chỉ tồn tại trong thế giới Smalltalk và nó được gọi là GLORP. Nó cho phép bạn duy trì mô hình miền của bạn trong một DB quan hệ mà không cần phải sửa đổi các lớp miền. Tôi hiện đang cố gắng triển khai các ý tưởng tương tự để tách khỏi Django ORM.Động cơ của tôi là sự kết hợp mạnh mẽ giữa các bảng DB và các lớp miền làm tổn hại đến sự phát triển phần mềm. Tôi sẽ đăng lại nếu tôi thành công :)

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