2012-01-24 23 views
5

Próbuję znaleźć najlepszy sposób na zaprojektowanie mojego projektu MVC 3. Podczas wyszukiwania w Internecie natknąłem się na sugestię, która zasadniczo mówi prawy klik na projekcie i dodaje obszar. W tym celu utworzono folder obszaru o tej samej strukturze kontrolera/widoku/modelu w tym samym projekcie. Nie tego chcę. Chcę elastyczności posiadania oddzielnych projektów. Zachowam tylko widoki w głównym projekcie internetowym. Wszystko inne w osobnym projekcie.Struktura projektu MVC 3

W ramach tej próby utworzyłem osobny projekt dla moich kontrolerów. Teraz utknąłem, wskazując działanie kontrolera na widok. We wszystkich przykładach online kliknięcie prawym przyciskiem myszy i dodanie widoku. Ponieważ jest to projekt biblioteki klasowej, nie mam takiej elastyczności. Gdzie się mylę?

Wszystkie przykłady, które znalazłem, w tym te, które przeszły przez Asp.net, w zasadzie wyjaśniają, jak tworzyć aplikacje do nauki, które są dobre tylko do celów edukacyjnych. Duża aplikacja komercyjna nie może mieć wszystkich widoków/modeli/kontrolerów w jednym projekcie. Czy jest to sposób, w jaki powinien przejść w MVC? Nie jestem pewien, czy robienie wszystkiego za pomocą kliknięć myszy jest również dobrym pomysłem. W świecie webformów było też wiele aplikacji dla początkujących, które używały kliknięć myszką do tworzenia podstawowych aplikacji CRUD, ale w prawdziwych komercyjnych projektach nigdy nie korzystaliśmy z tych metod.

Jakie są twoje myśli, wskazówki na ten temat?

Dzięki za poświęcony czas ...

+6

Dlaczego duża aplikacja komercyjna nie ma wszystkich widoków, modeli i kontrolerów w jednym projekcie? –

+0

Czy oni mogą? Czy oni? Czy ktokolwiek miał jakiekolwiek doświadczenie w umieszczaniu wszystkiego w jednym projekcie i nie miał problemów z robieniem tego w dłuższej perspektywie? W projekcie formularzy internetowych jego kod wywoływałby warstwę aplikacji lub warstwę biznesową, która znajdowała się w osobnym projekcie. Czy nie dzieje się to tutaj w świecie asp.net MVC? Nie mam nic przeciwko umieszczeniu wszystkiego w jednym projekcie. Potrzebuję tylko wskazówek od kogoś, kto ma doświadczenie w robieniu tego w ten sposób ... i potwierdzeniu, że jest to najlepszy sposób ... lub przynajmniej jeden z lepszych sposobów. – user20358

Odpowiedz

8

MVC opiera się na konwencji; Konwencja polega na umieszczeniu wszystkich widoków na/widokach, modelach w/modelach i kontrolerach w/kontrolerach. Możesz zmienić konwencję, ale nie ułatwi ci to życia.

Z koncepcyjnego punktu widzenia ma to sens. Jeśli zachowasz całą logikę domeny i dostęp do danych w oddzielnych projektach, pozostaniesz z materiałami związanymi z siecią, kontrolerami, widokami modeli i widokami. To twój projekt MVC.

Pamiętaj, że jeśli chcesz podzielić się części w oddzielnych projektów można znaleźć portable areas użyteczne.

+0

Czy obszary dla MVC 3 nie są obsługiwane przez firmę Microsoft? Dlaczego nie mogę znaleźć żadnej dokumentacji na ten sam na MSDN lub asp.net lub jakiejkolwiek witrynie microsoft? – user20358

+0

Oczywiście, jest w pełni obsługiwany. Nie jestem pewien co do dokumentów na MSDN lub innych stronach, wolę czytać książki, aby uzyskać solidną bazę wiedzy na temat technologii (patrz [moja odpowiedź] (http://stackoverflow.com/a/8590071/64096) do nieco pokrewne pytanie). –

+0

Przy okazji, szybkie wyszukiwanie w Google daje [ten komunikat] (http://msdn.microsoft.com/en-us/library/ie/ee671793.aspx) w witrynie MSDN i [wideo wprowadzające] (http: // www. asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas) na asp.net. –

4

ja nie rozumiem, dlaczego nie można użyć wbudowanego w generatorach jako bazę dla swoich poglądów i kontrolerów? Nic nie mówi, że musisz zostawić je jako wygenerowane. Osobiście uważam, że to jest naprawdę fajne, aby uzyskać wygenerowaną dla mnie bazę (za pomocą kliknięć myszką).

Projekt MVC to tylko warstwa interfejsu użytkownika. Szaleństwem jest umieszczanie w nim logiki dla aplikacji na dużą skalę. Dlatego zwykle dobrze jest mieć jeden projekt dla całego interfejsu użytkownika. Dzięki temu łatwiej uzyskać ogólny przegląd interfejsu użytkownika.

Powiedziawszy, istnieją sposoby uzyskania rozwiązania opartego na wtyczce, w którym można przenosić kontrolery (modele i widoki) do bibliotek klas. Ale to nie jest łatwe.

  1. Musisz stworzyć wirtualny dostawcy ścieżki (aby odnaleźć poglądy)
  2. Dodać wszystkie widoki osadzone
  3. zmodyfikować plik projektu, aby uzyskać „Dodaj widok” dialogowe itp
  4. Stosować obszary (ułatwia to)
  5. Powiedz BuildManager, że istnieje plik DLL wtyczki.

też trzeba zmodyfikować ścieżkę wirtualną do dostawcy dostępu widoki z wtyczki folderów, jeśli chcesz być w stanie zmienić poglądy podczas wykonywania w visual studio. Każda zmiana wymagałaby przebudowania biblioteki DLL wtyczki.

Aktualizacja

Video dla MVC2 (obszary MVC3 działa tak samo): http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas

Należy pamiętać, że ten film jest dla obszarów w tym samym projekcie. Posiadanie obszarów w oddzielnych bibliotekach klas jest bardziej złożone. Najłatwiejszym rozwiązaniem jest korzystanie z przenośnych obszarów sugerowanych przez kogoś innego.

+0

krok po kroku dokumentacja firmy Microsoft dotycząca korzystania z Obszarów dla MVC 3? – user20358

+0

@ user20358: Przeczytaj moją aktualizację. – jgauffin

+0

Dzięki. Zrobi to. – user20358

2

Dlaczego zachować tylko swoje poglądy w „głównym projektu internetowej” - myślę, że brakuje punktu z MVC.

To kontrolery, które są twoją "główną stroną". Są tym, czego żądają użytkownicy i którzy je przesyłają, a nie widokiem.

Widok jest tylko tam, aby zapewnić środki do układu HTML dla kontroler pchnąć do przeglądarki.

Modele, które moim zdaniem powinny być modelami ViewModels, mają na celu przedstawienie substancji (tj. Prawdziwych danych) dla Państwa poglądów.

Więc widać, że układ MVC naprawdę chce wszystkie trzy z nich mają być pogrupowane sensownie ze sobą. Kontrolery współdziałają z Twoim użytkownikiem, pobierają widok (układ) i wypełniają go swoim ViewModel/Model (dane). To jest twój interfejs użytkownika, wszystkie trzy części MVC (jeśli pójdziesz z ViewModel tak czy inaczej) są tylko dla interfejsu użytkownika.

Skąd pochodzą dane, twoje prawdziwe modele i cokolwiek chcesz z tym zrobić, mogą z łatwością znajdować się w bibliotece DLL gdzieś lub po drugiej stronie zestawu usług sieciowych lub czegoś podobnego.

+0

Powiedzmy, że utrzymuję widoki i kontrolery w tym samym projekcie sieciowym. Ale potem wyprowadzam modele do oddzielnego projektu biblioteki klas. Moja warstwa dostępu do danych w oddzielnym projekcie biblioteki klas i warstwa biznesowa w oddzielnym projekcie biblioteki klas. Czy to byłaby dobra praktyka z twojego doświadczenia? Nadal muszę w pełni testować obszary ... ale nie chciałbym myśleć, że to jedyny sposób. – user20358

+1

Moja polityka nigdy nie polega na używaniu modeli rzeczywistych domen w interfejsie użytkownika, używam tylko modeli ViewModels, które są specjalnie zaprojektowane do interfejs użytkownika, a nie modele, które spełniają moje wymagania dotyczące domeny.Te modele widoków nie muszą bezpośrednio mapować do modeli domen, wybierają i wybierają właściwości z modeli domen do wyświetlenia. Prowadzi to do znacznej ilości "mapowania" kodu, ale możesz użyć automappera, aby zmniejszyć to obciążenie. Modele domen mogą być teraz w dowolnym miejscu, na warstwie, w usłudze sieciowej, w zupełnie innej technologii. Rzeczy, które utrzymuję w projekcie sieciowym to widoki, kontrolery i modele widokowe ...... –

+1

.... ciąg dalszy - w ten sposób projekt internetowy (widok, widok, kontroler) jest tak naprawdę właśnie tym interfejsem, który chcę położyć moja domena. Jeśli chcę zrobić coś innego, np. Aplikację mobilną, mam wybór, czy utworzyć interfejs mobilny do projektu internetowego, czy utworzyć inny projekt internetowy dla aplikacji mobilnej, jednak obie aplikacje nadal korzystają z tych samych usług domenowych. Niewiele przykładów wykorzystuje koncepcję viewmodel, która według mnie prowadzi do zbytniego powiązania interfejsu i domeny. –