Tôi đã phát triển các ứng dụng thực tế với cả Rails và ASP.NET MVC, nhưng câu trả lời này đi kèm với một cảnh báo quan trọng: Tôi đã học và phát triển với Rails phiên bản 2 trước, vì vậy tôi hoàn toàn có thể lỗi thời với tôi Rails kiến thức.
Điều đó đang được nói, tôi không nghĩ rằng có bất cứ điều gì có thể được thực hiện với một nhưng không phải là khác. Đưa ra bất kỳ yêu cầu nào cho một ứng dụng web, bạn sẽ có thể xây dựng ứng dụng đó - có thể hiệu quả tương đương - với Rails hoặc ASP.NET MVC.
Có một vài điều thú vị - theo hiểu biết tốt nhất của tôi - có sẵn trong ASP.NET MVC chủ yếu là do các khía cạnh của C # /. NET. Ví dụ: khi tôi có một trang chứa biểu mẫu được gửi, tôi sẽ có một Hành động kiểm tra xem liệu nó đang xử lý GET hay POST để quyết định phải làm gì:
def edit
@item = Item.find(params[:id])
if request.post?
@item.update_attributes(params[:item])
redirect_to :action => 'edit', :id => @item.id
end
end
Đây là một ví dụ tầm thường của nó, nhưng if request.post?
mẫu này là một mẫu cực kỳ phổ biến trong Rails. Đối với các trường hợp không tầm thường, mã Hành động có thể trở nên lớn và lộn xộn, và thông thường, tôi ước rằng tôi có thể cấu trúc lại nó thành các phương thức riêng biệt một cách sạch sẽ. Trong ASP.NET MVC tôi có thể làm điều đó:
public ActionResult Edit() {
// Render my page that has the Edit form
...
}
[HttpPost]
public ActionResult Edit(Foothing foo) {
// Save my Foothing data
...
}
Tôi nghĩ rằng việc có thể phân tách rõ ràng việc xử lý các yêu cầu GET và POST là gọn gàng. Số dặm của bạn có thể thay đổi.
Một điều khác mà ASP.NET MVC thực hiện đó là siêu tuyệt vời (một lần nữa theo ý kiến của tôi) cũng liên quan đến việc xử lý mẫu POSTS. Trong Rails, tôi phải truy vấn params
hàm băm cho tất cả các biến mẫu của tôi. Hãy nói rằng tôi có một biểu mẫu với các trường 'trạng thái', 'được cộng hưởng', 'đảo ngược' và 'bố trí':
def edit
@item = Item.find(params[:id])
if params[:status] == "new"
...
else
...
end
if params[:gonkulated] == "true"
...
else
...
end
if params[:invert] == "true"
...
else
...
end
# Rest ommited for brevity
end
Nhưng ASP.NET MVC gọn gàng cho phép tôi lấy tất cả các giá trị biểu mẫu của mình làm tham số cho phương thức Hành động của mình:
[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
...
}
Đó là hai điều mà tôi thực sự yêu thích về ASP.NET MVC hoặc Rails. Chúng không đủ lý do để bất kỳ nhà phát triển lành mạnh hoặc có thẩm quyền nào chọn một khung trên khung kia.