2013-03-17 12 views
6

Zaczynam integrować WebApi & OData w aplikację testową. Zachowajmy prostotę i trzymajmy się jednego podmiotu domeny - klienta. Oczywiście będę miał kontroler MVC. Wyszukiwanie otrzymuje własny model widoku (oparty na indeksie Lucene), więc będzie to osobny kontroler, teraz ODataController. Ale ponieważ strony do przeglądania/edycji będą miały własne modele widoków, będą one własnymi kontrolerami. Zaczyna się to wydawać przesadą.Overkill WebApi i kontrolera

Próba znalezienia dobrego projektu, który sprawi, że to zadziała i nadal będzie działał z ideą adresu URL reprezentującego encję. Czy encja w adresie URL powinna być Klientem i jakoś udostępniam różne reprezentacje na podstawie parametrów URL? Czy klient/CustomerSearch/CustomerEdit może być innym podmiotem (co nie brzmi dobrze)?

+0

Rich, aktualnie pracuję nad projektem, w którym zamierzamy używać OData i Web API, ale chcę, aby był elastyczny (podobnie jak wywołania EF). Nie jesteśmy na tym etapie (zamierzamy przejść z bezpośredniego db do usług). Myślicie przed zakrętem. Dlatego nie sądzę, że jest ktoś, kto mógłby ci pomóc. OData nie jest już nowa, ale nie sądzę, że wiele sklepów jej używa. Małżeństwo z web API wydawało mi się intuicyjnie oczywiste, więc zrobiłem badania. oto kilka filmów na temat wdrażania takiego rozwiązania od naszych partnerów w MS http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api –

Odpowiedz

0

Przypuszczam, że ta aplikacja WebAPI będzie osobnym rozwiązaniem z rozwiązania ASP.NET MVC, które zamierzasz zbudować. W skrócie, WebAPI będzie warstwą biznesową/domenową, a MVC będzie warstwą prezentacji.

Tak więc, mówiąc o rozwiązaniu WebAPI, potrzebujesz tylko jednego ApiController dla przykładu klienta, który przedstawiłeś powyżej. Żądanie wyświetlenia/zmiany może mieć własne modele widoku ... lub nie. W zależności od tego, jak tworzysz model widoku, możesz mieć jeden model widoku dla klientów lub możesz utworzyć hierarchię widoku klienta, w której model widoku podstawowego przechowuje dane związane z wyszukiwaniem, a model widoku zstępującego uzupełnia szczegóły. .

Twoje żądania routingu może wyglądać tak:

GET - /Customer/     retrieve multiple customers 
            (supplying OData parameters in query string) 
GET - /Customer/{id}    retrieve a single customer 
PUT - /Customer/{id}    edit customer 

Co to wygląda to trzeba to dwie drogi, jedna ApiController dla klienta, a trzy metody żądania za to, co opisane. Nie polecam oddzielnego ApiController dla OData, ponieważ funkcjonalność zależy od obiektu.

+0

Po przemyśleniu tego, jestem zdecydowanie patrząc na nie używanie ODataController, szczególnie tylko Gets będzie zrobiony, a ponieważ blokuje mnie w kontrolerze działającym tylko dla jednego typu obiektu. Używam odmian tego routingu. "/ Customer" przy użyciu bazy WebApi Funkcja queryable dla wyszukiwania i działań dla View Model i Edycja modelu "/ Customer/View/{id}" + "/ Customer/Edit/{id}" – Rich

+0

Może nie rozumiem twojego podejścia . Użyjesz akcji po stronie WebAPI, zamiast od czasowników HTTP? –

+0

Prawdopodobnie potrzebuję obu. Problem polega na tym, że model tylko dla widoku i model dla edycji będą z definicji różne. Na przykład model edycji może potrzebować listy możliwych Ról, które może mieć klient. Model widoku oczywiście tego nie będzie mieć. Ale model edycji będzie wymagał zarówno GET, jak i PUT/POST. – Rich

Powiązane problemy