İş nesnelerimiz üzerinde çok sayıda birim testi ve yeniden düzenleme yapıyoruz ve sınıf tasarımı konusunda diğer akranlardan çok farklı görüşlere sahibim .
Ben hayranı değilim örnek bir sınıf:
public class Foo
{
private string field1;
private string field2;
private string field3;
private string field4;
private string field5;
public Foo() { }
public Foo(string in1, string in2)
{
field1 = in1;
field2 = in2;
}
public Foo(string in1, string in2, string in3, string in4)
{
field1 = in1;
field2 = in2;
field3 = in3;
}
public Prop1
{ get { return field1; } }
{ set { field1 = value; } }
public Prop2
{ get { return field2; } }
{ set { field2 = value; } }
public Prop3
{ get { return field3; } }
{ set { field3 = value; } }
public Prop4
{ get { return field4; } }
{ set { field4 = value; } }
public Prop5
{ get { return field5; } }
{ set { field5 = value; } }
}
"Gerçek" sınıfta, hepsi dize değildir, ancak bazı durumlarda tamamen herkese açık mülkler için 30 destek alanımız vardır.
Ben nefret Bu sınıf, ve ben sadece seçici davranıyorum eğer bilmiyorum. Dikkat edilmesi gereken birkaç nokta:
- Özelliklerde mantığı olmayan özel destek alanları gereksiz görünüyor ve sınıfı şişiriyor
- Birden fazla kurucu (biraz iyi) ancak
- tüm özellikleri bir kamu ayarlayıcı sahip, ben bir hayran değilim.
- Potansiyel olarak boş bir yapıcı nedeniyle hiçbir özelliğe değer atanmaz, bir arayan farkında değilse potansiyel olarak çok istenmeyen ve davranışlarını test etmek zor olabilir.
- Çok fazla özellik var! (30 vakada)
Herhangi bir zamanda, bir uygulayıcı olarak nesnenin hangi durumda olduğunu gerçekten bilmek çok daha zor Foo
. Argüman " Prop5
nesne yapımı sırasında ayarlamak için gerekli bilgiye sahip olmayabiliriz . Tamam, sanırım bunu anlayabiliyorum, ama eğer durum buysa Prop5
, her zaman bir sınıfta en fazla 30 mülkü değil, sadece ayarlayıcıyı herkese açık hale getirin .
"Yazması kolay (herkese açık)" olmanın aksine "kullanımı kolay" bir sınıf istemek için nit seçici ve / veya çılgın mıyım? Yukarıdaki gibi sınıflar bana çığlık atıyor, bunun nasıl kullanılacağını bilmiyorum, bu yüzden her ihtimale karşı her şeyi herkese açık hale getireceğim .
Çok seçici davranmıyorsam, bu tür düşüncelerle mücadele etmek için iyi argümanlar nelerdir? Tartışmaları açıklamakta çok iyi değilim, çünkü kastettiğim noktaya değinmeye çalışırken çok sinirliyim (kasıtlı olarak değil).
get
veya set
:-)