Zdaję sobie sprawę, że nie każdy korzysta z dokładną architekturę przy opracowywaniu aplikacji MVC, ale załóżmy, że mam następującą strukturę:Zrozumienie nowego podejścia Web API
App.Core --> Class Library (POCO or Domain objects)
App.Data --> Class Library (Repository and Entity Framework)
App.Service --> Class Library (Service layer with all business logic)
App.Web --> asp.net MVC 3.0 project
App.Data --> Has a reference to App.Core
App.Service --> Has a reference to App.Core and App.Data
App.Web --> Has a reference to App.Core and App.Service
Wewnątrz naszej MVC Aplikacja staramy się postępować zgodnie z tym podejściem:
- Wewnątrz naszego kontrolera (w ramach metody), tworzymy instancję ViewModel.
- Wypełniamy że ViewModel wywołanie metody z naszego App.Service warstwy
- Po ViewModel jest wypełnione, to wracamy do widoku (więc widok jest obecnie silnie wpisany).
Dzieje się to w 99.9% przypadków. Jest czysto, nam się to podoba i bardzo dobrze się prezentuje .. tak!
Teraz moje pytanie jest następujące:
Jeśli zdecydujemy się przenieść naszą aplikację MVC 4.0 i rozpocząć korzystanie z nowego API podejście internetowej , nie jestem pewien, że w pełni zrozumieć, gdzie (lub jak) pasowałoby to do naszej obecnej architektury?
Należy pamiętać, że jesteśmy otwarci na zmianę tej sytuacji!
Czy powinniśmy utworzyć nową warstwę App.WebAPI, która znajduje się pomiędzy App.Service i App.Web? Oznacza to, że wewnątrz naszych kontrolerów nie będziemy już musieli wywoływać App.Service bezpośrednio, ale zamiast tego nową warstwę App.WebAPI?
Lub pozostaw interfejs Web API w warstwie App.Web i spraw, by kontrolery wywoływały inne kontrolery APIController, które z kolei wywoływałyby warstwę App.Service?
Nie jestem pewien, czy mam tu jakiś sens ... ale proszę, zasugeruj cokolwiek, ponieważ jestem ciekawy różnych danych wejściowych.
Dzięki
Uważam, że wasze drugie podejście jest tym, czego szukamy. Biorąc pod uwagę, że możemy mieć innych klientów (iPad, iPhone itp.). Wniosek jest taki, że zarówno MVC, jak i Web API znajdują się w tej samej warstwie. Zmodyfikuj je tak, aby wchodziły w interakcję z Warstwą usługi (która zawiera logikę biznesową), a następnie wypełniły różne modele ViewModels na podstawie tego, kto co wywołał. Czy to jest poprawne? – Vlince
@Vlince, dokładnie. Bardzo dobrze to podsumowałeś. –
Dziękuję za pomoc :-) – Vlince