2009-02-27 42 views
9

Tôi thực sự thích cách ASP.NET MVC hoạt động. Tôi muốn thực hiện nó trên tất cả các dự án web mới tiến lên phía trước, nhưng tôi đã đánh lừa một nguyên mẫu vào một ngày khác mà tôi thực sự chưa tìm được giải pháp tốt, vì vậy tôi hỏi bạn, bạn sẽ thiết kế ứng dụng MVC như thế nào không phù hợp với mẫu REST điển hình? Ví dụ, nguyên mẫu mà tôi đã thiết kế sẽ có nhiều trang, nhưng bản thân các trang không nhất thiết phải ràng buộc với một mô hình miền. Ví dụ, phải mất một trang web đăng ký đơn giản, mà có thể có những trang sau:Thiết kế hành động điều khiển ASP.NET MVC

  • /Default.aspx
  • /Register.aspx
  • /ThankYou.aspx

thoảng, chẳng hạn một chương trình có thể yêu cầu một phần quản trị để xử lý các chi tiết như kiểm duyệt đăng ký hoặc xem lại dữ liệu. Trong một ứng dụng ASP.NET web chuẩn, tôi có thể thêm vào sau

  • /Admin/Default.aspx
  • /Admin/ListRegistrations.aspx
  • /Admin/ViewReports.aspx ...

nó sẽ là một sai không thể chấp nhận từ mô hình MVC, trong trường hợp này, có hai bộ điều khiển như:

  • Trang chủ-> Index
  • 01.
  • Trang chủ-> Đăng ký
  • Trang chủ-> thankyou
  • do quản trị viên> Chỉ mục
  • do quản trị viên> ListRegistrations
  • do quản trị viên> Reports

thất vọng của tôi với điều này trở nên phức tạp bởi thực tế là không có thực hiện vững chắc thực sự của các tiểu vùng và khu vực. Tôi biết về nguyên mẫu "Khu vực" do Phil Haack phối hợp, nhưng nó không quá chín chắn, và thẳng thắn mà nói, tôi không chắc mình thích cách thiết lập, nhưng tôi thực sự không biết mình thích để xem công việc đó.

Tôi đoán khi nghĩ MVC, tôi có xu hướng nghĩ REST cũng như có các hành động điều khiển đại diện cho các trang thay vì thực thể hoặc hành động thực sự không phù hợp với tôi. Bạn nghĩ sao?

Trả lời

3

Bạn luôn có thể kết hợp ASP.NET Web Forms với MVC.

Chỉ cần thêm

routes.IgnoreRoute("Pages/{*path}"); 

để bảng định tuyến của bạn và thêm các trang web dưới dạng truyền thống để Pages thư mục của ứng dụng.

+0

Đây có lẽ là ý tưởng hay nhất. Tôi có thể thấy thiết kế phần người dùng của trang web để sử dụng các công cụ MVC trong khi vẫn giữ logic cụ thể của quản trị viên trong các biểu mẫu web thông thường. Cảm ơn vì đã nhắc tôi. – Chris

1

Bạn có thể có nhiều bộ điều khiển phù hợp; bố cục đó có vẻ hợp lý. Lưu ý rằng các tuyến đường không để ánh xạ trực tiếp đến {controller}/{action}, nhưng nó giữ mọi thứ đơn giản. Có vẻ ổn với tôi - ngoại trừ tôi có thể có ThankYou như một cái nhìn - tức là thanh ghi [GET] có thể sử dụng một cái nhìn khác để đăng ký [POST]

+1

Tôi đoán sự nhầm lẫn/thất vọng của tôi với mẫu thực sự bắt đầu xây dựng khi nói về một kịch bản điển hình, nơi có thể có các thư mục lồng nhau để tách biệt chức năng. Ví dụ, một bộ điều khiển sản phẩm cho người dùng, nhưng sau đó là một bộ điều khiển quản trị sản phẩm để duy trì sản phẩm. Ở đâu? Làm sao? – Chris

3

Một sai lầm mà người mới đến MVC thực hiện là nhóm các hành động vào bộ điều khiển vì lý do hiển thị. Trong trường hợp của bạn, thay vì nhóm các hành động Đăng ký và ThankYou với trang chủ, hãy thử tách chúng ra thành một AccountController như nhóm MVC đã thực hiện trong dự án mẫu. Bạn có thể sử dụng định tuyến để thiết lập của Url lên tuy nhiên bạn muốn cho người dùng cuối.

Đối với các hành động khác của bạn, làm thế nào về ReportController? Sau đó bạn có thể có thêm một AdministrationController có hành động/khung nhìn Index chứa các liên kết đến các hành động quản trị khác nhau, bao gồm cả các hành động trên ReportController.

Phiên bản ngắn: Hành động nhóm thành bộ điều khiển theo chức năng, chứ không phải điều hướng trang web.

+0

Tôi hiểu điều đó, nhưng về quan điểm thì sao? Trong kịch bản mà tôi đã mô tả, tôi có thể muốn các hoạt động của bộ điều khiển cho phần quản trị để kế thừa một trang cái riêng biệt hơn các trang chủ cho phần người dùng. Có vẻ như không phải là một cách hợp lý để tách biệt các khung nhìn theo cách này dựa trên trang cái mà chúng sử dụng. – Chris

+0

hành động của bộ điều khiển = lượt xem, ý tôi là – Chris

+0

Bạn có thể có trang quản trị chính trong thư mục Chế độ xem/Quản trị mà lượt xem trong tham chiếu Lượt xem/Báo cáo. Tôi không thấy bất cứ điều gì sai trái khi làm điều đó - bạn đang thực sự nói về các mẫu trình bày ở đây, không có gì mà bộ điều khiển nên biết. – Troy

3

Tôi thường bỏ bộ điều khiển "Home" làm điều đầu tiên trong dự án và thay thế bằng bộ điều khiển "Trang". Tôi sử dụng cái đó cho bất cứ thứ gì "chỉ" một trang. Những điều như "FAQ", "Contact Us", v.v. Tôi làm điều này ít nhất một phần vì cách tiếp cận mặc định cho bộ điều khiển Home yêu cầu một phương thức mới được thêm vào mỗi lần bạn cần ngay cả một trang tĩnh cơ bản.

Trong bộ điều khiển đó, tôi chỉ có một hành động: Hiển thị. Hành động đó cung cấp cho tất cả các trang đó cùng một đối tượng ngữ cảnh. Tôi thực sự lưu trữ nội dung cho những trang đó trong cơ sở dữ liệu với một tra cứu "slug" và gắn nó vào NVelocity templating, nhưng thậm chí chỉ tĩnh HTML hoặc NVelocity mẫu trong các tập tin sẽ làm việc quá.

Bất cứ điều gì khác, như những người khác nói, được chia thành các bộ điều khiển bởi "điều" được quản lý. Vì vậy, một ReportController, User hoặc AccountController, CartController, vv Sau đó, các hành động có ý nghĩa hơn nhiều.

Khi bạn đang nói về việc liệt kê người dùng đã đăng ký, đó thực sự là danh sách người dùng, vì vậy tôi sẽ có UserController và/User/Display/Registered/MostRecent hoặc tương tự. Đối với bản thân đăng ký,/User/Register sẽ đăng lên/User/SaveRegistration để chuyển hướng đến/User/DisplayProfile/NewUserID hoặc/Page/Display/Home từ đó.

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