2008-09-15 35 views
8

Hướng dẫn RoR đặt một mô hình cho mỗi bảng để ORM hoạt động. Lược đồ DB của tôi có khoảng 70 bảng được chia thành 5 nhóm chức năng (ví dụ, bất kỳ bảng nào được sống trong một và chỉ một nhóm chức năng, và quan hệ giữa các bảng của các nhóm khác nhau được giảm thiểu.) Vì vậy: tôi có nên thiết kế một mô hình không cho mỗi nhóm khái niệm, hay tôi chỉ đơn giản là có 70 mẫu Rails và rời khỏi nhóm 'khái niệm'? Cảm ơn!Thực hành tốt nhất cho thiết kế mô hình trong Ruby on Rails

Trả lời

8

Tôi trình bày điều này trong một trong các ứng dụng lớn của mình bằng cách chỉ đảm bảo rằng các bảng/mô hình được nhóm theo khái niệm theo tên (với mối quan hệ gần như mô hình bảng 1: 1). Ví dụ:

events 
event_types 
event_groups 
event_attendees 
etc... 

Bằng cách đó khi tôi đang sử dụng TextMate hoặc bất kỳ thứ gì, các tệp mô hình được phân loại độc đáo với nhau theo loại alpha. Tôi có 80 mẫu trong ứng dụng này và nó hoạt động đủ tốt để giữ mọi thứ được sắp xếp.

+0

Tất nhiên, điều này giải quyết vấn đề gọn gàng. – NickR

10

Rất có thể, bạn nên có 70 kiểu máy. Bạn có thể không gian tên các mô hình để có 5 không gian tên, một cho mỗi nhóm, nhưng điều đó có thể gây rắc rối nhiều hơn giá trị của nó. Nhiều khả năng, bạn có một số chức năng phổ biến trong mỗi nhóm. Trong trường hợp đó, tôi sẽ tạo một mô-đun cho mỗi nhóm chứa hành vi của nó và bao gồm nó trong mỗi mô hình có liên quan. Ngay cả khi không có chức năng chia sẻ, việc này có thể cho phép bạn nhanh chóng truy vấn một mô hình cho nhóm khái niệm của nó.

+0

Thankyou! Đột nhiên tôi hiểu tại sao tôi có thể muốn sử dụng các mô-đun. Tắt để đọc thêm .. – NickR

6

Bạn chắc chắn nên sử dụng một mô hình cho mỗi bảng để tận dụng tất cả các phép thuật ActiveRecord.

Nhưng bạn cũng có thể nhóm các mô hình của mình lại với nhau thành các không gian tên bằng các mô-đun và thư mục con, để tránh phải quản lý 70 tệp trong thư mục mô hình của bạn.

Ví dụ, bạn có thể có:

app/models/admin/user.rb 
app/models/admin/group.rb 

cho các mô hình quản trị :: người dùng và quản trị :: Group, và

app/models/publishing/article.rb 
app/models/publishing/comment.rb 

cho xuất bản :: Điều và xuất bản :: Bình luận

Và cứ thế ...

+0

Thankyou! Các thư mục con/không gian tên là một giải pháp tốt. Nick – NickR

1

Có thể có một số ít trường hợp bạn có thể sử dụng bàn phím Rails mô hình thừa kế bảng đơn. Có lẽ tất cả các lớp trong một nhóm chức năng cụ thể có cùng các trường (hoặc gần như giống nhau). Trong trường hợp đó, hãy tận dụng ưu đãi của DRYness STI. Tuy nhiên, khi nó không có ý nghĩa, hãy sử dụng class-per-table.

Trong phiên bản lớp học mỗi bảng, bạn không thể dễ dàng kéo chức năng chung vào lớp cơ sở. Thay vào đó, hãy kéo nó vào một mô-đun. Cấu trúc phân cấp như sau có thể hữu ích:

app/models/admin/base.rb - module Admin::Base, included by all other Admin::xxx 
app/models/admin/user.rb - class Admin::User, includes Admin::Base 
app/models/admin/group.rb - class Admin::Group, includes Admin::Base 
4

Nếu không biết thêm chi tiết về bản chất của bảy mươi bảng và quan hệ khái niệm của chúng thì không thực sự có thể đưa ra câu trả lời hay. Các bảng kế thừa này có được thiết kế từ đầu không?

Các bảng có liên quan đến một số loại mẫu thừa kế hay không? Rails có thể làm một dạng thừa kế giới hạn. Tra cứu đơn thừa kế bảng (STI).

Cá nhân, tôi sẽ cố gắng tránh làm việc với bảy mươi bảng đơn giản vì đó là rất nhiều công việc - 70 Mô hình & Bộ điều khiển và 4+ lượt xem, người trợ giúp, bố cục và thử nghiệm của chúng chưa đề cập đến bộ nhớ tải vấn đề giữ thiết kế trong ind. Trừ khi tất nhiên tôi đã được trả tiền theo giờ và đủ tốt để bù đắp cho sự lặp lại.

1

Nó đã được đề cập, thật khó để đưa ra lời khuyên tốt mà không biết lược đồ cơ sở dữ liệu của bạn, tuy nhiên, tôi sẽ dựa vào việc tạo ra hơn 70 mô hình, (một cho mỗi bảng của bạn.)

Bạn có thể thoát khỏi một số mô hình, nhưng với chi phí (không đáng tin cậy) bạn cũng có thể có chúng ở đó.

Bạn không cần tạo bộ điều khiển + lượt xem cho từng mô hình (như answerd bởi srboisvert). Bạn chỉ cần một bộ điều khiển cho mỗi tài nguyên (mà tôi mong đợi là ít hơn rất nhiều so với 70 - có lẽ chỉ có 10 hoặc 15 hoặc để đánh giá theo mô tả của bạn).

4

Trước khi nhảy vào một làm 70 mô hình, hãy xem xét câu hỏi này để giúp bạn quyết định:

mỗi bảng của bạn có thể được coi là một "đối tượng" ví dụ như một bảng "xe" hoặc là một số trong các bảng cầm chỉ có thông tin về mối quan hệ, tất cả các cột khóa ngoài chẳng hạn?

Trong Rails chỉ các bảng "đối tượng" trở thành mô hình! (Với một số ngoại lệ đối với các loại kết hợp cụ thể) Vì vậy, rất có thể là nếu bạn chỉ có 5 nhóm chức năng, bạn có thể không có 70 mô hình. Ngoài ra, nếu các nhóm chức năng mà bạn đề cập là rất khác nhau, chúng thậm chí có thể phù hợp nhất trong ứng dụng của riêng chúng.

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