Buku-buku dan dokumentasi tentang MVC hanya menumpuk menggunakan istilah Stateful dan Stateless. Sejujurnya, saya hanya tidak dapat mengambil ide itu, apa yang dibicarakan buku-buku itu. Mereka tidak memberikan contoh untuk memahami salah satu dari kedua negara, bukan hanya mengatakan bahwa HTTP adalah stateless dan dengan ASP.NET MVC microsoft akan ikut serta. Apakah saya kehilangan beberapa pengetahuan mendasar, karena saya tidak dapat memahami apa yang stateful dan mengapa stateful dan sama berlaku untuk stateless.
Contoh sederhana dan pendek yang berbicara tentang tombol kontrol seperti atau kotak teks dapat menyederhanakan pemahaman saya kira.
sumber
Stateless - Tidak ada memori (status) yang dikelola oleh program
Stateful - Program memiliki memori (status)
Untuk menggambarkan konsep negara saya akan mendefinisikan fungsi yang stateful dan yang stateless
Tanpa kewarganegaraan
Stateful
Seperti yang orang lain katakan, http pada dasarnya tidak bernegara. Jadi status harus dibangun ke dalam aplikasi Anda.
Bayangkan permintaan melalui web di mana Anda memiliki browser klien yang berkomunikasi dengan proses server. Untuk mempertahankan status melalui protokol http stateless, browser akan mengirim biasanya mengirim pengidentifikasi sesi ke server pada setiap permintaan. Untuk setiap permintaan server akan seperti "ah, ini orangnya". Informasi negara kemudian dapat dilihat dalam memori sisi server atau dalam database berdasarkan id sesi ini.
Dalam lingkungan yang murni tanpa kewarganegaraan, Anda tidak memerlukan id sesi ini. Setiap permintaan akan berisi semua informasi yang perlu diproses oleh server. Tetapi banyak aplikasi perlu mempertahankan status untuk melacak apakah suatu sesi diautentikasi untuk melihat konten tertentu atau untuk melacak apa yang dilakukan pengguna. Anda tidak ingin mengirim kredensial pengguna melalui kawat untuk setiap permintaan.
sumber
kewarganegaraan berarti tidak ada memori masa lalu. Setiap transaksi dilakukan seolah-olah itu dilakukan untuk pertama kalinya.
statefull berarti ada memori masa lalu. Transaksi sebelumnya diingat dan dapat mempengaruhi transaksi saat ini.
sumber
Menurut pendapat sederhana saya perbedaan antara ASP.NET (stateful) dan ASP.NET-MVC (stateless) dapat diisolasi dengan fakta bahwa yang pertama menyediakan kontrol sisi server dan yang lainnya tidak.
Perlu dicatat bahwa pendekatan formulir web ASP.NET diarahkan untuk mentransisikan pemrogram VB dan VC ++ lama yang digunakan dalam model yang didorong model untuk memiliki cara cepat yang baik untuk mempelajari pemrograman web mengikuti paradigma model acara yang sama, seperti Anda mengklik sebuah tombol dan voila Anda memicu suatu acara! Yang perlu Anda lakukan sekarang adalah menulis kode Anda di event handler. Karena itu ASP.NET perlu memiliki konsep seperti view state dan postbacks untuk memantau keadaan sisi server mengontrol setiap round trip.
ASP.NET-MVC, bagaimanapun, tidak menggunakan kontrol sisi-server sehingga tidak harus mempertahankan status. Model MVC memisahkan domain masalah menjadi tiga partisi sehingga data dikirim ke klien secara efisien.
Singkatnya, kontrol sisi server adalah apa yang membuat mereka berbeda sejauh statusnya dan stateless.
sumber
Tambahan jawaban tepat @coder.
Gagasan negara adalah untuk mengingat data sebelumnya .
Misalnya, Anda memiliki kontrol daftar di server dengan nilai "A, B, C" dan "A" dipilih. Daftarnya masuk ke browser klien. Anda memilih "B". Dan memposting kembali ke server. Bagaimana Anda tahu bahwa nilainya berubah?
ASP.NET
Microsoft menggunakan istilah ViewState di ASP.NET. Ada kesalahpahaman besar di antara pengembang tentang hal itu.
ViewState menyimpan semua keadaan awal daftar di
<input type="hidden" value="base64 encoded" />
: nilai "A, B, C" dan tandai "A dipilih".Kemudian dengan post back browser mengirimkan ViewState dan "B dipilih" ke server. ASP.NET mengembalikan keadaan awal daftar dan menerapkan pilihan "B" baru. Ini dilakukan untuk memikat pengembang WinForms (disebutkan oleh @Ronald). Di server web, Anda dapat berlangganan perubahan daftar
listObject.Changed += OnChanged
.ASP.NET MVC
Masalah dengan ViewState adalah ukurannya. Selama bertahun-tahun. Pengembang NET terpaksa mentransfer kilobyte informasi yang tidak berguna, seperti status 20 kontrol untuk setiap perjalanan pulang-pergi.
Pendekatan baru ini hanya mengirim nilai "B" yang baru dan kecil.
Atau jika Anda ingin melacak perubahan dari "A" ke "B" kemudian implementasikan sendiri. Menggunakan javascript dan mengirim "Was A, Now B". Atau simpan dan ambil status dengan ID di SQL Server.
sumber
Operasi stateful memodifikasi atau memerlukan beberapa keadaan sistem, dan operasi stateless tidak.
Contoh kotak teks stateful akan menjadi komentar yang diedit sebelumnya di StackExchange - kotak teks perlu menampilkan komentar Anda sebelumnya dan tahu post-thread yang terlibat dengan itu untuk menerima dan memproses input Anda.
Formulir komentar email umum dengan tag mailto: akan berupa kotak teks tanpa kewarganegaraan - ia menerima input Anda dan melemparkannya ke aplikasi email workstation Anda tanpa menyimpan informasi apa pun.
sumber