2011-11-08 49 views
28

Tôi tự hỏi khi nào bạn biết rằng bạn cần tạo bộ điều khiển trong ứng dụng đường ray.Khi nào tạo bộ điều khiển mới trong đường ray

Ví dụ, tôi sẽ xem qua hướng dẫn trong Phát triển Web nhanh với Rails và ứng dụng tạo ra một số mô hình, tất cả đều có chế độ xem riêng biệt và người theo dõi. Tuy nhiên, chúng tôi cũng tạo bộ điều khiển Cửa hàng nhưng không có mô hình nào được liên kết với bộ điều khiển đó. Tại sao chúng ta cần một bộ điều khiển không có mô hình? Không thể các bộ điều khiển cho các mô hình xử lý tất cả các hoạt động được yêu cầu?

Điều này có phổ biến không? Nếu vậy, làm thế nào để bạn xác định khi một cái gì đó đảm bảo một bộ điều khiển?

Cảm ơn!


Những câu trả lời này giúp ích, cảm ơn bạn.

Quan tâm của tôi là khi tôi tự mình phát triển, tôi sẽ bắt đầu tạo các bộ điều khiển vô ích hoặc ngược lại, không tạo các bộ điều khiển cần thiết. Nhưng, tôi cho rằng tôi cần phải ngừng suy nghĩ về các bộ điều khiển và các mô hình như một mối quan hệ 1-1, đúng không? Nếu tôi hiểu chính xác, có thể có nhiều bộ điều khiển truy cập một mô hình và nhiều mô hình được sử dụng trong một bộ điều khiển?

+0

.. không có gì cả. – Ernest

Trả lời

31

CẬP NHẬT: Tôi khuyên bạn nên đọc số How DHH Organizes His Rails Controllers , điều này giải thích khá nhiều về câu trả lời ban đầu của tôi.


Tôi nghĩ câu hỏi sẽ phù hợp hơn nếu bạn muốn đặt nó một cách khác:

Tại sao chúng ta cần mô hình (AR trong trường hợp này) cho mỗi bộ điều khiển?

Và câu trả lời tất nhiên là, bạn thì không. Khi bạn đang nghĩ về bộ điều khiển, tốt nhất là không nên suy nghĩ về dữ liệu, nhưng hãy lùi lại một chút và suy nghĩ về các tài nguyên . Nếu bạn tìm kiếm REST trên internet, bạn sẽ tìm thấy nhiều bài viết và hầu hết trong số chúng sẽ bao gồm các giải thích khác nhau về các điều khoản tài nguyênđại diện. Để làm cho câu chuyện này ngắn gọn, hãy chỉ đơn giản hóa và nói rằng tài nguyên là tất cả những gì đáng nói đến. Các bài viết là một tài nguyên (sưu tập). Cửa hàng là một tài nguyên (số ít, thành viên).

Lấy người dùng đăng nhập chẳng hạn. Bạn có thể đã có UsersController (theo mặc định) sẽ cho phép bạn thêm người dùng mới (tạo tài nguyên), xóa chúng (loại bỏ tài nguyên), hiển thị người dùng đơn và tất cả người dùng. Nếu bạn chỉ nghĩ về dữ liệu và bộ điều khiển, có thể bạn sẽ bắt đầu tạo các hành động bổ sung như login_user trong UserController, đó là một mùi. Nếu bạn nghĩ về tài nguyên và đó là "mọi thứ đáng nói đến hoặc tạo URI cho nó", bạn có thể nghĩ rằng bạn cần một tài nguyên khác, và đó là: phiên. Hãy suy nghĩ về cách này: khi người dùng đăng nhập, anh ta thực sự tạo tài nguyên phiên. Và khi đăng xuất, bạn xóa, xóa tài nguyên. Nó được giải thích tốt hơn nhiều trong Rails hướng dẫn cuốn sách mà tôi khuyên bạn: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:sessions

Để tóm tắt lại, điều này có thể giúp bạn trong việc tìm ra khi bạn cần điều khiển mới:

  • Khi bạn nghĩ về việc đưa phi RESTful các hành động trong bộ điều khiển như log_in, calculate_date, ect.
  • Khi có điều gì đó mà bạn có thể đặt tên và điều đó "thú vị" đủ để trở thành một nguồn tài nguyên riêng biệt.
  • Ngoài ra, khi bạn đang phát triển ở "bên ngoài trong" phong cách, câu trả lời như vậy đến một cách tự nhiên hơn: http://rubylearning.com/blog/2010/10/05/outside-in-development/

Nhìn chung, tìm hiểu về REST và triết lý của nó sẽ giúp rất nhiều.

+0

Đây là câu trả lời rất sâu sắc và hữu ích. – Ziggy

0

Bộ điều khiển có thể được sử dụng để tạo các trang không có đường viền cho mô hình. Một ví dụ cho rằng có thể là một thông báo pháp lý hoặc sth. như thế. Công cụ tĩnh, ...

A Controller kiểm soát dữ liệu. Trong hầu hết các trường hợp, những dữ liệu này xuất phát từ số Model nhưng đây không phải là sự kết hợp phổ biến nhất.

8

Rõ ràng, không có quy tắc cứng và nhanh; nhưng tôi nghĩ rằng nó rất hữu ích để suy nghĩ về những gì ba phần khác nhau của MVC đại diện (hay "làm"):

  • Models đại diện cho dữ liệu và dữ liệu logic backend
  • Controller để cho các người sử dụng tương tác với các mô hình
  • Lần là những gì người dùng nhìn thấy khi người dùng tương tác thông qua một bộ điều khiển

tiếp Vì vậy, khác nhau con lăn sẽ được sử dụng cho khi bạn muốn làm khác nhau (loại) những thứ.

Ví dụ, trong sách AWD, ứng dụng Depot hoạt động (rộng rãi) bằng cách thao tác và lưu trữ Sản phẩm - do đó, nó có mô hình Sản phẩm.

Có hai cách tương tác khác nhau; với tư cách là chủ sở hữu của Depot (thêm sản phẩm, điều chỉnh giá và chứng khoán ...) hoặc với tư cách là khách hàng (thêm sản phẩm vào giỏ hàng, kiểm tra ...). Vì vậy, nó có một bộ điều khiển quản trị cho các cựu, và một bộ điều khiển cửa hàng cho sau này.

Một lý do khác, và một trong đó thường sẽ gắn vào đầu tiên, là nếu bộ điều khiển của bạn cần gói khác nhau. Ví dụ: bạn cần phải xác thực người dùng trước khi thực hiện bất kỳ công cụ nào của Quản trị viên, nhưng bạn không phải cho những thứ dựa trên Khách hàng. Vì vậy, bạn có thể tách các hành động thành hai bộ điều khiển và đặt một số before_filter trên trình quản lý để xử lý xác thực.

1

Tôi cũng mới tham gia RoR và tôi đang thực hiện một hướng dẫn từ Michael Hartl. Tôi tìm thấy trong nghiên cứu của tôi và nói chuyện với Rubyist dày dạn hơn khi bạn cần sự trợ giúp của Mô hình (cơ sở dữ liệu) của bạn, bạn nên tạo một Controller. Ví dụ, nếu bạn đang tạo một phiên và phương thức mà bạn đang tạo sẽ cần giao tiếp với Mô hình (cơ sở dữ liệu) bằng cách sử dụng, lưu trữ, cập nhật, thêm (a.k.a. hành vi RESTful) thì bạn sẽ cần một bộ điều khiển.

Tại sao? Như đã nói ở trên: công việc khung MVC đòi hỏi rằng Bộ điều khiển là yếu tố duy nhất có thể tương tác với Mô hình (giống như một bouncer tại VIPs của một câu lạc bộ đêm chứa đầy phụ nữ nóng! Các geeks được đại diện bởi "xem" LOL! !) !!

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