2008-09-23 23 views
48

Czy dodanie usługi sieci Web do mojego projektu ASP.NET MVC łamie całą koncepcję MVC?ASP.NET MVC i usługi sieciowe

Usługa sieci Web (WCF) zależy od warstwy modelu od mojego projektu MVC, aby komunikować się z zapleczem (więc wygląda na to, że musi być częścią rozwiązania MVC).

Czy powinienem dodać to do warstwy kontrolera lub modelu?

Odpowiedz

27

Wygląda na to, że należy podzielić swój model na własny zespół i odwołać go do aplikacji MVC i aplikacji WCF.

  • YourApp.Data - wspólna modelu i dostępu do danych może
  • YourApp.Web - Jeśli chcesz podzielić się więcej na Twoich internetowych aplikacji
  • YourApp.Web.Mvc
  • YourApp.Web .WebService

Jeśli chcesz użyć trybu MVC w WebServices, powinieneś użyć MVC do zbudowania własnej aplikacji REST.

+0

Czy nie powieliliby Państwo logiki kontrolera w serwisie? I nic nie oszczędzając przy użyciu modelu, ponieważ dwa razy kończysz pisać kod kontrolera. –

+0

@Rob, nie, ponieważ kod kontrolera do przeglądania stron internetowych powinien mieć do czynienia z widokami i modelami sprawdzania poprawności itp. Spokojny sterownik api powinien idealnie wypluwać json i formatować dane. – Chev

19

Czy istnieje szczególny powód, dla którego musisz dodać usługi sieciowe do swojej aplikacji MVC? O ile nie istnieje konkretny powód, powinieneś używać kontrolerów w sposób RESTOWNOWY, tak samo jak RESTful Web Service.

Sprawdź ten post z Rob Connery uzyskać więcej informacji: ASP.Net MVC: Using RESTful architecture

+0

To jest dość stare, ale możesz mieć odpowiedź na pytanie, które mam. Mam wrażenie, że aby dynamicznie ładować, na przykład, listę rozwijaną z wartościami, które zmieniają się, gdy zmienia się inne rozwijanie, potrzebowałbym usługi internetowej. Tak właśnie zrobiłbym na webformach. Jak to się robi w MVC? – Erix

+2

Link jest uszkodzony i nie udało mi się znaleźć zaktualizowanego linku. Treść dostępna jest na Wayback Machine: http://web.archive.org/web/20130119131317/http://wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture –

0

Dodałem usług internetowych do mojego wniosku i to działa dobrze. Nie wierzę, że narusza to MVC, ponieważ jest to alternatywny interfejs dla twojego modelu. Usługa MVC nie jest odpowiednia dla usług internetowych, ponieważ usługi internetowe nie mają widoku.

+4

Usługi internetowe mogą tworzyć za pomocą MVC tak samo dobrze jak strony internetowe lub kanały RSS. W rzeczywistości jest to jedna z mocnych stron koncepcji MVC - ta sama akcja kontrolera może przekazywać dane do dowolnego widoku - treści usług sieciowych, więc to * jest * widokiem. :) – hangy

2

Nie sądzę, że oddzielenie modelu na własny zespół ma wpływ na to, czy używasz MVC, czy nadal masz model. Gdzie to jest z pewnością nieistotne?

11

Oddzielenie modelu na własny projekt nie powoduje złamania wzoru "MVC". Po pierwsze, jest to po prostu - wzór. Intencją wzoru MVC jest wyraźne określenie pomiędzy danymi, procedurami obsługi danych i prezenterami oraz sposobem, w jaki łączą się między nimi. Najlepszym sposobem na to jest, jak sugeruje Seb:

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

Coś, co może pomóc to MVC Storefront, które zebrał Rob Conery. Idź obejrzeć film tutaj:

MVC Storefront Video Series

A jeśli chcesz spojrzeć na rzeczywiste kodu w przeglądarce, aby szybko zobaczyć, jak on to zrobił, przejdź tutaj: MVC Storefront Codeplex Code Browser

1

Miałem idź do tego.

Zobacz mój wynik w my blog

PS: Nie wierzę, że to złamie koncepcji MVC tak długo, jak uważasz, że serwis internetowy jest modelem z repozytorium, ponieważ wszystko jest serwis internetowy nie wraca zrzut XML.

+0

Zaktualizowałem adres URL, aby nie wygaśnie – Zac

+0

lol, "nie wygaśnie" – Chev

0

Pomyśl o usługach sieciowych i bazach danych jako o jednym w tym samym. Zgodnie z tą analogią, wydaje mi się, że warto umieścić swoje usługi sieciowe w miejscu, w którym umieszczasz logikę bazy danych.