2008-09-23 12 views
48

Việc thêm một dịch vụ Web vào dự án ASP.NET MVC của tôi có phá vỡ toàn bộ khái niệm về MVC không?ASP.NET MVC & Dịch vụ Web

Dịch vụ web đó (WCF) phụ thuộc vào lớp Mô hình từ dự án MVC của tôi để giao tiếp với back-end (vì vậy có vẻ như tôi cần phải là một phần của giải pháp MVC).

Tôi có nên thêm mục này vào Lớp điều khiển hoặc Mô hình không?

Trả lời

27

Có vẻ như bạn nên tách mô hình của mình thành một hội đồng của riêng mình và tham khảo nó từ ứng dụng MVC và ứng dụng WCF của bạn.

  • YourApp.Data - Thuê chung mô hình và truy cập dữ liệu có thể
  • YourApp.Web - Nếu bạn muốn chia sẻ hơn trên web-ứng dụng của bạn
  • YourApp.Web.Mvc
  • YourApp.Web .WebService

Nếu bạn muốn làm WebServices MVC-style có thể bạn nên sử dụng MVC để xây dựng ứng dụng REST của riêng bạn.

+0

Bạn sẽ không sao chép logic điều khiển trong dịch vụ được không? Và tiết kiệm không có gì bằng cách sử dụng một mô hình, kể từ khi bạn kết thúc viết mã điều khiển hai lần. –

+0

@Rob, không vì mã điều khiển để xem trang web nên xử lý chế độ xem và xác thực mô hình, v.v. Bộ điều khiển api an toàn lý tưởng sẽ tách ra json và định dạng dữ liệu. – Chev

19

Có lý do cụ thể nào bạn cần thêm dịch vụ web vào ứng dụng MVC của mình không? Trừ khi có một lý do cụ thể bạn nên sử dụng bộ điều khiển của bạn theo cách RESTful giống như bạn làm một dịch vụ web RESTful.

Kiểm tra bài đăng này từ Rob Connery để biết thêm thông tin: ASP.Net MVC: Using RESTful architecture

+0

Điều này khá cũ, nhưng bạn có thể có câu trả lời cho câu hỏi mà tôi có. Tôi theo ấn tượng để tải động, nói, một danh sách thả xuống với các giá trị thay đổi khi một thay đổi thả xuống khác, tôi cần một dịch vụ web. Đây là cách tôi sẽ làm điều đó trong webForms. Làm thế nào điều này được thực hiện trong MVC? – Erix

+2

Liên kết bị hỏng và tôi không thể tìm thấy liên kết được cập nhật. Nội dung có sẵn trên Máy Wayback: http://web.archive.org/web/20130119131317/http://wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture –

0

Tôi đã thêm dịch vụ web để ứng dụng của tôi và nó hoạt động tốt. Tôi không tin nó vi phạm MVC vì nó là một giao diện thay thế cho mô hình của bạn. MVC không thích hợp cho các dịch vụ web vì dịch vụ web không có chế độ xem.

+4

Dịch vụ web có thể được tạo bằng cách sử dụng MVC cũng như các trang web hoặc nguồn cấp dữ liệu RSS. Trên thực tế, đây là một trong những điểm mạnh của khái niệm MVC - cùng một hành động điều khiển có thể truyền dữ liệu của nó tới bất kỳ dạng xem nào - dịch vụ web xuất ra nội dung để nó * là * một chế độ xem. :) – hangy

2

Tôi không nghĩ rằng việc tách mô hình thành lắp ráp riêng của nó có mang bất kỳ việc bạn đang sử dụng MVC hay không, bạn vẫn có một mô hình. Trường hợp đó là không liên quan chắc chắn?

11

Tách mô hình thành dự án riêng của nó không phá vỡ mẫu "MVC". Trước hết, nó chỉ là - một mô hình. Mục đích của mẫu MVC là phân định rõ ràng giữa dữ liệu của bạn, trình xử lý dữ liệu và trình diễn và cách bạn giao tiếp giữa chúng. Cách tốt nhất để làm điều đó là như thế nào Seb gợi ý:

  • YourApp.Data
  • YourApp.Web.Mvc
  • YourApp.Web.WebService

Cái gì đó có thể giúp bạn ra ngoài là Cửa hàng MVC mà Rob Conery hợp lại. Tới xem video ở đây:

MVC Storefront Video Series

Và nếu bạn muốn nhìn vào mã thực tế trong trình duyệt của bạn để nhanh chóng xem làm thế nào ông đã làm nó, hãy vào đây: MVC Storefront Codeplex Code Browser

1

Tôi đã có một hãy làm điều này.

Xem kết quả của tôi tại my blog

ps: Tôi không tin rằng điều này sẽ phá vỡ các khái niệm MVC quá lâu như bạn nghĩ rằng một dịch vụ web là mô hình của một kho lưu trữ bởi vì tất cả một dịch vụ web nào đang trở lại một kết xuất XML.

+0

Tôi đã cập nhật URL để nó không hết hạn – Zac

+0

lol, "nó sẽ không hết hạn" – Chev

0

Hãy nghĩ về dịch vụ web và cơ sở dữ liệu dưới dạng giống nhau. Theo sự tương tự này, tôi nghĩ rằng nó có ý nghĩa để đặt ingteractions dịch vụ web của bạn, nơi bạn đặt logic cơ sở dữ liệu của bạn.