Książki i dokumentacja na temat MVC po prostu stosują warunki stanowe i bezpaństwowe. Szczerze mówiąc, nie jestem w stanie pojąć, o czym mówią książki. Nie podają żadnego przykładu, aby zrozumieć którykolwiek z tych stanów, zamiast po prostu powiedzieć, że HTTP jest bezstanowy i wraz z ASP.NET MVC microsoft się z nim zgadza. Czy brakuje mi podstawowej wiedzy, ponieważ nie rozumiem, co jest stanowe i dlaczego jest stanowe, a to samo dotyczy bezpaństwowców.
Prosty i krótki przykład, który mówi o kontrolce, takiej jak przycisk lub pole tekstowe, może uprościć zrozumienie, jak sądzę.
źródło
Bezstanowy - program nie utrzymuje pamięci (stanu)
Stanowy - program ma pamięć (stan)
Aby zilustrować pojęcie stanu, zdefiniuję funkcję, która jest stanowa i taka, która jest bezpaństwowa
Bezpaństwowiec
Stanowy
Jak powiedzieli inni, http jest z natury bezpaństwowcem. Więc stan musi być wbudowany w twoje aplikacje.
Wyobraź sobie żądanie przez Internet, w którym przeglądarka klienta komunikuje się z procesem serwera. Aby utrzymać stan przez bezstanowy protokół HTTP, przeglądarka zazwyczaj wysyła identyfikator serwera do każdego żądania. Dla każdego żądania serwer będzie przypominał „ah, to ten facet”. Informacje o stanie można następnie wyszukać w pamięci po stronie serwera lub w bazie danych na podstawie tego identyfikatora sesji.
W środowisku czysto bezstanowym nie potrzebujesz tego identyfikatora sesji. Każde żądanie zawierałoby wszystkie informacje, które serwer musiałby przetworzyć. Ale wiele aplikacji musi utrzymywać stan, aby śledzić, czy sesja jest uwierzytelniana, aby wyświetlać określone treści lub śledzić to, co robi użytkownik. Nie chcesz wysyłać danych uwierzytelniających użytkownika za pośrednictwem drutu dla każdego żądania.
źródło
bezpaństwowiec oznacza, że nie ma pamięci o przeszłości. Każda transakcja jest wykonywana tak, jakby była wykonywana po raz pierwszy.
statefull oznacza, że istnieje pamięć przeszłości. Poprzednie transakcje są zapamiętywane i mogą mieć wpływ na bieżącą transakcję.
źródło
W mojej prostej opinii różnicę między ASP.NET (stanowy) i ASP.NET-MVC (bezstanowy) można oddzielić od faktu, że pierwszy zapewnia kontrolę po stronie serwera, a drugi nie.
Warto zauważyć, że podejście do formularzy internetowych ASP.NET jest ukierunkowane na przekształcanie starych programistów VB i VC ++, którzy są wykorzystywani w modelu opartym na modelu zdarzeń, aby mieć dobry szybki sposób uczenia się programowania internetowego zgodnie z tym samym paradygmatem modelu zdarzeń, tak jak kliknięcie przycisk i voila wywołujesz zdarzenie! Wszystko, co musisz teraz zrobić, to napisać kod w module obsługi zdarzeń. Z tego powodu ASP.NET musiał mieć takie koncepcje, jak stan widoku i informacje zwrotne, aby monitorować stan kontrolek po stronie serwera podczas każdej podróży.
Jednak ASP.NET-MVC nie używa kontrolek po stronie serwera, więc nie musi utrzymywać stanu. Model MVC dzieli domenę problemów na trzy partycje, dzięki czemu dane są dostarczane do klienta w sposób usprawniony.
Podsumowując, elementy sterujące po stronie serwera wyróżniają je pod względem stanu i bezstanowości.
źródło
Dodatek do dokładnej odpowiedzi na @coder.
Ideą stanu jest zapamiętywanie poprzednich danych .
Na przykład, masz kontrolę listy na serwerze z wybranymi wartościami „A, B, C” i „A”. Lista trafia do przeglądarki klienta. Wybierz „B”. I prześlij z powrotem na serwer. Skąd wiesz, że wartość została zmieniona?
ASP.NET
Microsoft używa terminu ViewState w ASP.NET. Istnieje ogromne nieporozumienie wśród programistów na ten temat.
ViewState przechowuje wszystkie początkowe stany listy
<input type="hidden" value="base64 encoded" />
: wartości „A, B, C” i znak „Wybrano A”.Następnie przeglądarka przesyła pocztą ViewState i „B jest wybrany” na serwer. ASP.NET przywraca początkowy stan listy i stosuje nowy wybór „B”. Zrobiono to, aby zwabić programistów WinForms (wspomniane przez @Ronald). Na serwerze WWW możesz subskrybować listę zmian
listObject.Changed += OnChanged
.ASP.NET MVC
Problemem z ViewState jest rozmiar. Przez lata programiści .NET zmuszali do przesyłania kilobajtów bezużytecznych informacji, takich jak stany 20 elementów sterujących dla każdej podróży.
Nowe podejście polega na wysyłaniu tylko nowej i małej wartości „B”.
Lub jeśli chcesz śledzić zmianę z „A” na „B”, zaimplementuj ją samodzielnie. Korzystanie z javascript i wysyłanie „Was A, Now B”. Lub zapisz i pobierz stan według identyfikatora w SQL Server.
źródło
Operacja stanowa modyfikuje lub wymaga pewnego stanu systemu, a operacja bezstanowa nie.
Przykładem stanowego pola tekstowego byłby wcześniej edytowany komentarz na StackExchange - pole tekstowe musi wyświetlać twój poprzedni komentarz i znać wątek, w którym był zaangażowany, aby zaakceptować i przetworzyć twoje dane wejściowe.
Ogólny formularz komentarza z tagiem mailto: byłby bezstanowym polem tekstowym - przyjmuje dane wejściowe i przekazuje je do aplikacji pocztowej stacji roboczej bez zachowania jakichkolwiek informacji.
źródło