Interesują mnie artykuły zawierające konkretne informacje na temat projektowania bezstanowego i stanowego w programowaniu. Jestem zainteresowany, ponieważ chcę dowiedzieć się więcej na ten temat, ale naprawdę nie mogę znaleźć żadnych dobrych artykułów na ten temat. Przeczytałem dziesiątki artykułów w Internecie, które niejasno omawiają ten temat lub mówią o serwerach i sesjach internetowych - które również są `` stanowe i bezstanowe '', ale interesuje mnie bezstanowe vs stanowe projektowanie atrybutów w kodowaniu . Przykład: Słyszałem, że klasy BL są z założenia bezstanowe, klasy encji (a przynajmniej tak je nazywam - jak Person (id, name,…)) są stanowe itp.
Myślę, że ważne jest, aby wiedzieć, ponieważ wierzę, że jeśli to zrozumiem, będę mógł napisać lepszy kod (np. Mając na uwadze szczegółowość).
W każdym razie, naprawdę krótko, oto, co wiem o stanowych i bezpaństwowych:
Stanowe (jak WinForms): przechowuje dane do dalszego wykorzystania, ale ogranicza skalowalność aplikacji, ponieważ jest ograniczona przez procesor lub limity pamięci
Bezstanowe (podobnie jak ASP.NET - chociaż ASP próbuje być stanowy z ViewStates): po zakończeniu akcji dane są przesyłane, a instancja jest przekazywana z powrotem do puli wątków (amorficzna).
Jak widać, są to dość niejasne i ograniczone informacje (i dość skoncentrowane na interakcji z serwerem), więc byłbym naprawdę wdzięczny, gdybyś mógł podać mi kilka smaczniejszych informacji :)
źródło
Bezpaństwowość oznacza, że nie ma pamięci o przeszłości. Każda transakcja przebiega tak, jakby była wykonywana po raz pierwszy.
Stanowy oznacza, że istnieje pamięć o przeszłości. Poprzednie transakcje są zapamiętywane i mogą mieć wpływ na bieżącą transakcję.
Bezpaństwowcy:
Stanowy:
Zobacz: /software/101337/whats-the-difference-between-stateful-and-stateless
źródło
Stateful aplikacja jest jeden, który przechowuje informacje o tym, co działo się lub zmienione, ponieważ zaczął biec. Wszelkie publiczne informacje o tym, w jakim „trybie” się znajduje, lub ile rekordów zostało przetworzonych, lub cokolwiek innego, czynią go stanowym.
Aplikacje bezstanowe nie ujawniają żadnej z tych informacji. Za każdym razem dają tę samą odpowiedź na to samo żądanie, wywołanie funkcji lub metody. HTTP jest bezstanowe w swojej surowej postaci - jeśli wykonasz GET do określonego adresu URL, otrzymasz (teoretycznie) tę samą odpowiedź za każdym razem. Wyjątkiem jest oczywiście sytuacja, w której zaczynamy dodawać stanowość na wierzchu, np. Z aplikacjami internetowymi ASP.NET :) Ale jeśli pomyślisz o statycznej witrynie zawierającej tylko pliki HTML i obrazy, wiesz, o co mi chodzi.
źródło
Przymiotnik Stanowy lub Bezstanowy odnosi się tylko do stanu konwersacji, nie jest związany z koncepcją funkcji, która zapewnia to samo wyjście dla tego samego wejścia. Jeśli tak, każda dynamiczna aplikacja internetowa (z bazą danych) byłaby usługą stanową, co jest oczywiście fałszywe. Mając to na uwadze, jeśli powierzam zadanie utrzymania stanu konwersacji w podstawowej technologii (takiej jak sesja coockie lub http), wdrażam usługę stanową, ale jeśli wszystkie niezbędne informacje (kontekst) są przekazywane jako parametry I ' m implementowanie usługi bezstanowej. Należy zauważyć, że nawet jeśli przekazany parametr jest „identyfikatorem” stanu konwersacji (np. Bilet lub sessionId) to nadal działamy w ramach usługi bezstanowej,
źródło
session identifier
każdego żądania może zostać uznane za bezpaństwowe. Moim zdaniem taki przypadek zostałby uznany za stanowy. Jeśli jednak zawsze przekazujesztoken
użytkownikowi a, ale nie masz żadnego innego stanu, to jest to stan bezstanowy. Ale czuje stanowy XD. To jest takie zagmatwane.Pieniądze przelewane online z jednego konta na inne są stanowe, ponieważ rachunek odbiorcy zawiera informacje o nadawcy. Przekazywanie gotówki od osoby innej osobie jest transakcją bezpaństwową, ponieważ po otrzymaniu gotówki nie ma tożsamości dawcy wraz z gotówką.
źródło
Tylko po to, aby dodać wkład innych osób ... Innym sposobem jest spojrzenie na to z serwera WWW i punktu widzenia współbieżności ...
HTTP ma charakter bezstanowy z jakiegoś powodu… W przypadku serwera WWW bycie stanowym oznacza, że musiałby on zapamiętać „stan” użytkownika dla jego ostatniego połączenia i / lub utrzymywać otwarte połączenie z żądającym. Byłoby to bardzo kosztowne i „stresujące” w przypadku aplikacji z tysiącami jednoczesnych połączeń ...
Bycie bezstanowym w tym przypadku oznacza oczywiste efektywne wykorzystanie zasobów ... tj. Obsługę połączenia w pojedynczym wystąpieniu żądania i odpowiedzi ... Brak narzutu utrzymywania otwartych połączeń i / lub zapamiętywania czegokolwiek z ostatniego żądania ...
źródło
Sprawiamy, że Webapps staje się pełny, zastępując zachowanie bezstanowe HTTP przy użyciu obiektów sesji. Gdy używamy obiektów sesji, stan jest przenoszony, ale nadal używamy tylko HTTP.
źródło
Miałem te same wątpliwości co do projektowania klas bezstanowych v / s i przeprowadziłem pewne badania. Właśnie zakończone, a moje ustalenia zostały opublikowane na moim blogu
źródło