Durum Bilgisi İçermeyen ve Durum Bilgili


95

Programlamada devletsiz ve durum bilgili tasarım hakkında somut bilgiler içeren makalelerle ilgileniyorum. İlgileniyorum çünkü onun hakkında daha fazla şey öğrenmek istiyorum, ama gerçekten onun hakkında iyi bir makale bulamıyorum. Web'de konuyu belli belirsiz tartışan düzinelerce makale okudum ya da web sunucuları ve oturumlardan bahsediyorlar - bunlar aynı zamanda durum bilgisine karşı durum bilgisizdir, ancak kodlamada niteliklerin durum bilgisine karşı durum bilgisine dayalı tasarımıyla ilgileniyorum. . Örnek: BL sınıflarının tasarım gereği durumsuz olduğunu duydum, varlık sınıfları (veya en azından onlara böyle diyorum - Kişi (id, ad, ..) gibi) durum bilgili vb.

Bilmenin önemli olduğunu düşünüyorum çünkü anlayabilirsem daha iyi kod yazabileceğime inanıyorum (örneğin akılda ayrıntı düzeyi).

Her neyse, gerçekten kısa, işte durum bilgili ve durumsuz hakkında bildiklerim:

Durum bilgisi olan (WinForms gibi): Verileri daha sonra kullanılmak üzere depolar, ancak CPU veya bellek sınırlarıyla sınırlı olduğu için bir uygulamanın ölçeklenebilirliğini sınırlar

Durumsuz (ASP.NET gibi - ASP, ViewStates ile durum bilgili olmaya çalışsa da): Eylemler tamamlandıktan sonra, veriler aktarılır ve örnek iş parçacığı havuzuna geri verilir (Amorf).

Gördüğünüz gibi, oldukça belirsiz ve sınırlı bir bilgi (ve oldukça sunucu etkileşimine odaklanmış), bu yüzden bana biraz daha lezzetli bilgiler verirseniz gerçekten minnettar olurum :)

Yanıtlar:


58

StackOverflow'da durum bilgisiz programlamanın avantajlarını tartışan bir sorudan başlamanızı öneririm . Bu daha çok fonksiyonel programlama bağlamında, ancak okuyacaklarınız diğer programlama paradigmaları için de geçerlidir.

Durumsuz programlama, aynı argümanlarla çağrıldığında her zaman aynı sonuçları veren bir fonksiyonun matematiksel kavramıyla ilgilidir. Bu, işlevsel programlama paradigmasının temel bir kavramıdır ve bu alanda birçok ilgili makale bulabileceğinizi umuyorum.

Daha fazla bilgi edinmek için araştırabileceğiniz bir diğer alan ise RESTful web hizmetleridir. Bunlar, bir şekilde durumu korumaya çalışan diğer web teknolojilerinin aksine, tasarım gereği "vatansızdır". (Aslında, ASP.NET'in durumsuz olduğunu söylediğiniz şey doğru değildir - ASP.NET, ViewState kullanarak durumu korumak için çok çalışır ve kesinlikle durum bilgili olarak karakterize edilmelidir. Öte yandan ASP.NET MVC, durumsuz bir teknolojidir). RESTful web hizmetlerinin "vatansızlığını" tartışan birçok yer vardır ( bu blog spotu gibi ), ancak yine bir SO sorusundan başlayabilirsiniz .


Pekala, bilgi için teşekkürler, bağlantıya bir göz attım ve bazı ilginç bilgiler buldum! Yine de daha fazlasına açığım;)
Team-JoKi

Durum bilgisi olan ve durum bilgisinin önemli bir faktör olduğu başka bir alan ekledim (RESTful web servisleri).
kgiannakakis

Bilgi için teşekkürler! Cevabınıza oy veririm ama henüz yeterli temsilcim yok> _>
Team-JoKi

aynı kayıt sayfası kullanıcı kredileri için farklı sonuçlar verdiği için birçok web uygulaması durumdadır ... İlk kez kayıt başarılı olur ... aynı giriş kaydı ile ikinci kez başarısız olur .... çünkü web uygulamasının bir yerde kayıtlı kullanıcı durumu vardır .. .it veritabanı veya farklı depolama alanı olabilir
kendinizi iyi hissedin ve programlama

86

Vatansız , geçmişe dair bir anı olmadığı anlamına gelir. Her işlem sanki ilk defa yapılıyormuş gibi gerçekleştirilir.

Durum bilgisi , geçmişin hatırası olduğu anlamına gelir. Önceki işlemler hatırlanır ve mevcut işlemi etkileyebilir.

Vatansız:

// The state is derived by what is passed into the function

function int addOne(int number)
{
    return number + 1;
}

Durum bilgisi olan:

// The state is maintained by the function

private int _number = 0; //initially zero

function int addOne()
{
   _number++;
   return _number;
}

Referans: /software/101337/whats-the-difference-between-stateful-and-stateless


73

Bir durum bilgisi uygulaması biri olduğunu oldu yoksa çalışmaya başlamasından bu yana neler değiştiğini bilgileri depolar. Hangi "modda" olduğu veya kaç kaydın işlendiği veya her neyse, durum bilgisi olan herkese açık herhangi bir bilgi.

Durum bilgisi olmayan uygulamalar bu bilgilerin hiçbirini ifşa etmez. Her seferinde aynı isteğe, işleve veya yöntem çağrısına aynı yanıtı verirler. HTTP, ham haliyle durumsuzdur - belirli bir URL'ye GET yaparsanız, (teorik olarak) her seferinde aynı yanıtı alırsınız. Elbette istisna, örneğin ASP.NET web uygulamalarında en üste durum bilgisi eklemeye başladığımız zamandır :) Ancak yalnızca HTML dosyaları ve resimleri içeren statik bir web sitesi düşünürseniz, ne demek istediğimi anlayacaksınız.


18

Stateful veya Stateless sıfatı yalnızca konuşmanın durumuna atıfta bulunur, aynı girdi için aynı çıktıyı sağlayan işlev kavramı ile bağlantılı değildir. Eğer öyleyse, herhangi bir dinamik web uygulaması (arkasında bir veritabanı bulunan) durum bilgisi olan bir hizmet olacaktır ki bu açıkça yanlıştır. Bunu göz önünde bulundurarak, temel teknolojide konuşma durumunu koruma görevini verirsem (bir coockie veya http oturumu gibi), durum bilgisi olan bir hizmet uyguluyorum, ancak gerekli tüm bilgiler (bağlam) parametreler olarak aktarılırsa I ' vatansız bir hizmet uyguluyorum. Aktarılan parametre konuşma durumunun bir "tanımlayıcısı" olsa bile (örneğin bir bilet veya bir oturum kimliği) hala durumsuz bir hizmet altında çalıştığımıza dikkat edilmelidir,


session identifierHer istekte bir iletinin devletsiz kabul edilip edilemeyeceğinden emin değilim . Benim bakış açıma göre, böyle bir durum durumsal olarak kabul edilecektir. Bununla birlikte, tokenkullanıcı için her zaman bir geçerseniz, ancak durumsuz olması dışında hiçbir durumunuz yoksa. Ancak durum bilgisi olan XD'yi hissediyor. Bu çok kafa karıştırıcı.
7hi4g0

4

Bir hesaptan başka bir hesaba çevrimiçi olarak aktarılan para durum bilgisidir, çünkü alıcı hesap gönderen hakkında bilgi içerir. Bir kişiden başka bir kişiye nakit devretmek, bu işlem devamsızdır, çünkü nakit geri alındıktan sonra verenin kimliği nakit ile orada değildir.


1

Sadece başkalarının katkılarını eklemek için .... Başka bir yol da ona bir web sunucusundan ve eşzamanlılığın bakış açısından bakmaktır ...

HTTP, doğası gereği durumsuzdur ... Bir web sunucusu söz konusu olduğunda, durum bilgisi , son bağlantıları için bir kullanıcının 'durumunu' hatırlaması ve / veya bir istekte bulunana açık bir bağlantıyı sürdürmesi gerektiği anlamına gelir. Binlerce eşzamanlı bağlantıya sahip bir uygulamada bu çok pahalı ve 'stresli' olurdu ...

Bu durumda vatansız olmak , kaynakların açık bir şekilde verimli kullanımına sahiptir ... yani tek bir istek ve yanıt durumunda bir bağlantıyı desteklemek ... Bağlantıları açık tutmak ve / veya son istekten herhangi bir şey hatırlamak için ek yük yok ...



-3

Durum bilgisi olan v / s vatansız sınıf tasarımı konusunda aynı şüpheye sahiptim ve biraz araştırma yaptım. Yeni tamamlandı ve bulgularım bloguma gönderildi

  • Varlık sınıflarının durum bilgisine sahip olması gerekir
  • Yardımcı / çalışan sınıfları durum bilgisi içermemelidir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.