7

Tło: Myślałem o tym od dłuższego czasu i nie znalazłem żadnej dobrej odpowiedzi. Po pewnym czasie pracy z WebForms i okresowo z MVC 2,3 i 4 nadal nie rozumiem, w jaki sposób ASP.NET MVC może twierdzić, że jest implementacją wzorca MVC.Czy ASP.NET MVC jest błędną implementacją wzorca architekta MVC?

Jedną z pierwszych rzeczy, o których dowiedziałem się o MVC (wzorzec), jest to, że jest cykliczny - co oznacza, że ​​widok używa kontrolera, który aktualizuje model, który aktualizuje widok - i tak to idzie, w kółko. Oczywiście z Użytkownikiem w kręgu do wprowadzania nowych instrukcji/danych itp.

Jednak ASP.NET MVC nie jest tak naprawdę cykliczną implementacją, co zostało zademonstrowane na kolorowym obrazku poniżej z W3CSchools. Widziałem to również w praktyce, gdy widok ma instancję modelu, a model jest aktualizowany z kontrolera, ale gdzie kontroler jest również odpowiedzialny za aktualizację widoku po zaktualizowaniu modelu.

Pytanie: Czy ASP.NET MVC błędnie wprowadzone przez świadome i powinno być postrzegane jedynie jako zastrzeżonej interpretacji albo ja źle zasady wzorzec MVC?

ASP.NET MVC MVC Architectural pattern

+1

dobre pytanie. Inne implementacje frameworków MVC, które widziałem izolują widok z modelu. Przykładami są iOS i Android. W ASP.NET MVC można użyć modelu wewnątrz widoku. – Slavo

+2

Tak, to jest złe. Głównie dlatego, że oryginalna wersja 1.x przyjęła Railsy jako szablon (który faktycznie implementuje dziwną dezaprobatę PAC i miksu PageController). Obecne wersje ASP.NET MVC wciąż cierpią z powodu tego wyboru. –

+0

Oznaczałbym jako odpowiedź, gdybym mógł. – Marcus

Odpowiedz

-2

The (Database) Model nie aktualizuje widok, kontroler aktualizuje widok podczas przechodzenia widoku modelu jeśli używasz osobne modele widzenia (które powinny)

+0

W ASP.NET MVC tak, ale nie jest to domyślne w strukturze MVC, o ile wiem. Zamiast tego we wzorcu model powinien aktualizować widok, bez ingerencji ze strony kontrolera. Nie jestem pewien, czy zgadzam się, że model jest równy bazie danych. Widzę model jako reprezentację modelu danych. Poza tym nie odpowiada na moje pytanie. – Marcus

+0

Cóż, jeśli przeczytasz artykuł wikipedia, to twierdzi, że wzorzec MVC ewoluował i to właśnie dzieje się z obecnymi trendami rozwoju sieci. 'Ten pierwszy kontroler zdefiniowany przez MVC jako" moduł, który zajmuje się wprowadzaniem danych "(podobnie jak jak widok zajmuje się wyjściem). Kontroler, we współczesnych aplikacjach z lat 2000., jest modułem lub pośrednią sekcją kodu, która pośredniczy w komunikacji (między Modelem a Widokiem) i zatwierdza jednolite, za pomocą bezpośrednich połączeń lub Obserwatora - w celu rozłączenia Modelu od Zobacz w aktywnym Modelu. " – matthijsb

+0

Tak, oczywiście, ale ewoluowanie to nie to samo, co podążanie we wszystkich możliwych kierunkach przy zachowaniu nazwy. Właśnie dlatego mamy MVVM, MVP, DCI i więcej, które wszystkie pochodzą od wzorca MVC, ale z własnymi cechami. Uwaga: komentarze ciągle się zmieniają; Fakt, że kontroler zajmuje się komunikacją "między modelem a widokiem", nie mówi nic o kierunku komunikacji.Nadal uważam, że prawdziwa MVC powinna być cykliczna, a zatem komunikacja powinna być dostępna tylko dla kontrolera, aby można go było zobaczyć. – Marcus