Yöntemsiz sınıflara ne denir?
Örneğin,
class A
{
public string something;
public int a;
}
Yukarıda herhangi bir yöntemi olmayan bir sınıf var. Bu tür bir sınıfın özel bir adı var mı?
Yöntemsiz sınıflara ne denir?
Örneğin,
class A
{
public string something;
public int a;
}
Yukarıda herhangi bir yöntemi olmayan bir sınıf var. Bu tür bir sınıfın özel bir adı var mı?
Yanıtlar:
Çoğu zaman: Bir anti desen.
Neden? Çünkü "Operatör" sınıfları ve veri yapıları ile prosedürel programlamayı kolaylaştırır. Tam olarak iyi olmayan veri ve davranışları ayırın.
Çoğu zaman: Bir DTO (Veri Aktarım Nesnesi)
Bir iş / etki alanı nesnesinden türetilen veri alışverişi anlamına gelen salt okunur veri yapıları.
Bazen: Sadece veri yapısı.
Bazen, sadece sade ve basit olan ve üzerinde herhangi bir işlemi olmayan verileri tutmak için bu yapılara sahip olmanız gerekir. Ama sonra ortak alanları değil, erişimcileri (alıcılar ve ayarlayıcılar) kullanmam.
Ben diyorum struct
ya da record
veri depolama için kullanıldığı ve bu C
orada gördüğünüz gibi diller için çok yaygın olduğu için : struct (C programlama dili) . Şahsen ben struct
daha uygun ve okunabilir bir sınıf yerine kullanmayı tercih ederim :
struct A
{
public string something;
public int a;
}
Genellikle diğerleri gibi DTO (Veri Aktarım Nesnesi) olarak kullanılırlar.
Bunlar , boşluğun Java veya C veya CIL olduğu veya kullandığınız dilin olduğu Düz Eski __ Nesneler (PO_O) olarak bilinir .
İletişim için basit veri blokları olarak kullanılıyorlarsa, Veri Aktarım Nesneleri (DTO'lar) olarak bilinirler .
Harici olarak sağlanan verileri temsil ediyorlarsa, Varlıklar olarak bilinirler .
Böyle bir sınıfı değişebilir bir veri sahibi olarak adlandırırdım ve bazen genel bir form kullandım:
class DataHolder<T>
{
public T dat;
}
dat
Bir mülkün içine kaydırmanın performansı düşüreceğini ve fayda sağlayamayacağını unutmayın, çünkü bir mülk erişimcisinin yapabileceği (alanı okuma / yazma dışında) bazı uygulamaları bozmayacak bir şey yoktur. Ayrıca, (veya bir yapı ise, bunun alanlarıyla) Interlocked
yöntemlerin kullanılması gerekebilir dat
, ancak dat
bir mülke sarılırsa bu mümkün olmaz .
Değişken veri tutucuların, veri tutması gereken tipler için (değişebilir ya da değil) yararlı olabilmesine rağmen, değişmez tiplerle aynı şekilde veri alışverişi için güvenle kullanılamayacaklarını unutmayın. Örneğin, şöyle bir ifade:
myData = myCollection.GetData(myKey);
GetData
değişmez bir sınıf türü veya değişebilir verilere referans içermeyen bir yapı ("değişebilir" ya da değil) döndürülürse, açık bir anlamı olacaktır . Bununla birlikte, değişebilir bir sınıf nesnesi döndürdüyse, bu nesnede yapılan değişikliklerin temel alınan koleksiyon tarafından sürekli olarak yoksayılıp yok edilmeyeceği, sürekli olarak temiz güncellemelerle sonuçlanacağı veya hiçbir açıklamayı karşılamayan bazı rahatsız edici veya öngörülemeyen davranışlara neden olup olmayacağı belirsiz olacaktır.
Bir kişi değişken bir nesnede koleksiyon döndürme verisine sahip olmak isterse, doğru paradigma genellikle şöyle bir şey olurdu:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
Bu yaklaşımı kullanarak , koleksiyondaki verilerle doldurulmasına GetData
neden olacak myData
, ancak myCollection
işlev tamamlandıktan sonra ona bir referans tutması beklenmeyecek ya da başka bir amaç için kullanamayacağı net bir ima vardır . StoreData
aynı şekilde bilgileri myData
referans vermeden kendi dahili veri yapısına kopyalar . Bu yaklaşımın bir avantajı, istemci kodu bir döngü içinde birçok veri öğesini okuyacaksa, döngü myData
dışında bir örneği güvenli bir şekilde oluşturabilir ve ardından her seferinde aynı örneği yeniden kullanabilmesidir. Benzer şekilde, myCollection
anahtarla ilişkilendirilmiş nesne örneğini (geçirilen örnekten veri kopyalayarak) yeni bir örnek oluşturmadan yeniden kullanabilir.