2012-03-28 11 views
7

Gần đây tôi đã có một cuộc thảo luận với một người bạn của tôi, cũng là nhà phát triển RoR. Chúng tôi lập luận về cách quản lý các mô hình Rails. Cá nhân tôi muốn để lại trong không gian tên mặc định chỉ các mô hình gốc (ví dụ: User, Article, Bill, vv), và các mô hình phụ thuộc vào một mô-đun (ví dụ: User :: Profile, User :: Activity) với tên của root mô hình chúng được liên kết với.Mô hình không gian trong ứng dụng Rails

Mặt khác, tôi đã thấy nhiều dự án có 100 mô hình trong không gian tên mặc định được gọi là user_profile, user_activity, v.v. Đánh giá bằng phát triển Java (Spring), cộng đồng java có xu hướng tổ chức lớp học theo gói và nhóm chúng theo lô-gic, mà tôi thấy rất hấp dẫn. Vì vậy, câu hỏi đặt ra là: có bất kỳ hạn chế nào trong việc nhóm các mô hình trong các mô-đun (ngoại trừ thêm: class_name trong định nghĩa quan hệ) và có bất kỳ lý do cụ thể nào khiến mọi người thường không làm điều đó không? Không.

Trả lời

4

Mặc dù không gian tên có những ưu điểm của nó, nó yêu cầu thêm ngoại lệ trong toàn bộ mô hình của bạn. Foo :: Bar đặt tên bảng là bars và tương tự như vậy là bar_id cho các liên kết, trong khi bạn có thể thích sử dụng foo_barsfoo_bar_id.

Nếu bạn thực sự cảm thấy mạnh mẽ về điều này, bạn có thể muốn xem liệu có một tiện ích bổ sung sửa lỗi này cho bạn hay triển khai tiện ích mở rộng của riêng bạn không.

Trường hợp duy nhất khi tôi sử dụng không gian tên là cho các tiện ích được sử dụng trong các ứng dụng của bên thứ ba mà tôi không muốn yêu cầu tên mô hình ở cấp độ gốc. Nỗ lực thêm trong trường hợp này là đáng giá. Nếu bạn thấy phiền toái khi nhìn thấy hơn 100 tệp mô hình mà không có bất kỳ nhóm nào, bạn có thể sẽ khó chịu bằng cách nhìn thấy hơn 100 bảng không có nhóm và đó thường là thứ bạn không thể sửa được.

Bộ điều khiển tự cho mình vào nhóm khá tự nhiên, nhưng các mô hình không dễ dàng được cung cấp, ít nhất là không có cổ phiếu ActiveRecord.

+2

Tôi không thể nhớ lần cuối tôi mở trình khám phá cơ sở dữ liệu. Với ruby ​​nó đến tự nhiên để trừu tượng những điều như vậy. Theo như tôi nhớ, Foo :: Bar sẽ tạo ra một bảng "foo_bar". Hạn chế duy nhất là bạn phải chỉ định một: class_name => Foo :: Bar trong các hiệp hội. Tôi tự hỏi làm thế nào một ứng dụng đường ray có nghĩa vụ phải xử lý một ứng dụng phức tạp nếu nó khuyến khích để giữ cho tất cả các mô hình trong một thư mục. Ý tôi là, nếu ứng dụng phát triển quá nhiều, có phải không gian tên là một phần của việc tái cấu trúc cần thiết hay chỉ cần chuyển sang Java?) – FreeCandies

+6

Tôi thường sử dụng tiền tố như một loại không gian tên, do đó bạn tạo những thứ như UserProfile và UserActivity thay vì Hồ sơ hoặc Hoạt động. Điều này dẫn đến một loại nhóm tự nhiên trong danh sách. Thật hiếm khi thấy một ứng dụng với hơn 500 mẫu máy sẽ được hưởng lợi đáng kể từ việc đặt tên không gian tên. Phức tạp phức tạp. Đôi khi tốt hơn là nên trung thực về mức độ phức tạp của ứng dụng của bạn hơn là thử và giả vờ nó thực sự đơn giản bằng cách chôn vùi sự phức tạp và chỉ làm cho việc tìm kiếm mọi thứ trở nên khó khăn hơn. – tadman