2008-09-23 34 views
24

Có ai đã thiết lập quy ước đặt tên tốt cho hành động trong MVC không? Tôi đã đặc biệt nhìn vào ASP.net MVC nhưng nó là một câu hỏi chung. Ví dụ tôi có một hành động hiển thị màn hình đăng nhập (Đăng nhập) và một thao tác xử lý yêu cầu đăng nhập từ trang đó (LoginTest). Tôi không quan tâm đến tên và tôi còn rất nhiều ứng dụng để viết.Công ước đặt tên hành động

Trả lời

39

Rob Conery tại MS đề xuất một số kiểu đặt tên RESTful hữu ích cho các hành động.

* Index - the main "landing" page. This is also the default endpoint. 
* List - a list of whatever "thing" you're showing them - like a list of Products. 
* Show - a particular item of whatever "thing" you're showing them (like a Product) 
* Edit - an edit page for the "thing" 
* New - a create page for the "thing" 
* Create - creates a new "thing" (and saves it if you're using a DB) 
* Update - updates the "thing" 
* Delete - deletes the "thing" 

kết quả trong URL dọc theo dòng (đối với một diễn đàn)

* http://mysite/forum/group/list - shows all the groups in my forum 
* http://mysite/forum/forums/show/1 - shows all the topics in forum id=1 
* http://mysite/forums/topic/show/20 - shows all the posts for topic id=20 

Rob Conery on RESTful Architecture for MVC

+0

Tôi cũng thấy rằng với MVC mới nhất, bạn có thể đặt động từ nào được chấp nhận bởi một hành động để bạn có thể đặt tên cho một hành động Chỉnh sửa cho cả tải trang ban đầu và lưu thông tin. – stimms

+0

Dường như bài đăng từ Rob Conery có khả năng đưa ra cả hình thức hiển thị và phương thức xử lý mẫu có tên giống nhau. Tôi cũng lưu ý mẫu Nerd Dinner có Edit, nhưng mẫu Controller có Update để sửa đổi một thực thể. – Richard

+0

Tôi thích điều này - chỉ có vấn đề là bạn kết thúc với nhiều tệp xem trong dự án có cùng tên (ví dụ: 'Chỉnh sửa'), làm cho nó khó hiểu khi làm việc với nhiều tệp mở trong VS.Có ai biết giải pháp gọn gàng không? Tôi hiện đang gọi các chế độ xem "EditProduct", "ViewProduct", v.v. –

0

Hậu tố hành động Django được dựng sẵn _done. Vì vậy, LoginDone sẽ là trang xử lý Đăng nhập (theo kiểu trường hợp lạc đà ASP.NET MVC).

+0

Đó là okay, nhưng nó ngụ ý rằng việc đăng nhập đã được hoàn thành khi thực sự là hành động thực hiện được xử lý đăng nhập . Có lẽ PromptLogin và Đăng nhập. – stimms

0

Nó không liên quan đến quy ước bạn sử dụng để đặt tên Hành động điều khiển, miễn là nó phù hợp với bạn và dễ hiểu bởi những người làm việc trên đó.

Trong trường hợp hành động đăng nhập của bạn, LoginDone là tốt và trong cùng một ProcessLogin sẽ dễ hiểu, do đó, sử dụng một quy ước mà bạn cảm thấy thoải mái.

Cá nhân tôi có thể sẽ phụ thuộc vào Đăng nhập và ProcessLogin, vì LoginDone có thể hơi gây nhầm lẫn về những gì Hành động đang làm - điều này tất nhiên giả định rằng Hành động phản ứng với thông tin đăng nhập của người dùng và kiểm tra xem chúng có hợp lệ hay không . Sau đó, bạn có thể chuyển đến một Hành động khác được gọi là LoginDone khi đăng nhập thành công hoặc LoginFailed nếu nó không thành công.

1

Tôi đã tìm thấy một blog post by Stephen Walther hữu ích cho việc tìm kiếm một quán sơ đồ đặt tên. Anh ta cũng xuất phát từ một lược đồ đặt tên kiểu REST, với một số ngoại lệ duy nhất mà anh ta giải thích.

+1

Liên kết dường như không hoạt động nữa, nó đi vào một danh sách các bài viết MVC nhưng không ai có vẻ liên quan đến cuộc thảo luận này. Bất kỳ ai cũng có liên kết được cập nhật? –

+1

Đây là liên kết được cập nhật: http://stephenwalther.com/blog/archive/2008/06/27/asp-net-mvc-tip-11-use-standard-controller-action-names.aspx –

+0

nó cũng bị hỏng – Fedor

1

Đường ray có quy ước đặt tên hành động tốt cho các hoạt động CRUD: Rails Routing from the Outside In.

HTTP Verb Path Controller#Action Used for GET /photos photos#index display a list of all photos GET /photos/new photos#new return an HTML form for creating a new photo POST /photos photos#create create a new photo GET /photos/:id photos#show display a specific photo GET /photos/:id/edit photos#edit return an HTML form for editing a photo PATCH/PUT /photos/:id photos#update update a specific photo DELETE /photos/:id photos#destroy delete a specific photo

Đây thực chất là một bản cập nhật để Paul Shannon's answer, từ nguồn của mình (Rob Conery) ngầm nói rằng ông sao chép danh sách của mình từ Rails.

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