Kami melakukan banyak pengujian unit dan refactoring objek bisnis kami, dan saya tampaknya memiliki pendapat yang sangat berbeda tentang desain kelas daripada rekan-rekan lainnya.
Contoh kelas yang saya bukan penggemar:
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; } }
}
Di kelas "nyata", mereka tidak semua string, tetapi dalam beberapa kasus kami memiliki 30 bidang dukungan untuk properti publik sepenuhnya.
Saya benci kelas ini, dan saya tidak tahu apakah saya hanya pilih-pilih. Beberapa hal yang perlu diperhatikan:
- Bidang dukungan pribadi tanpa logika di properti, tampaknya tidak perlu dan membengkak kelas
- Banyak konstruktor (agak ok) tetapi ditambah dengan
- semua properti memiliki setter publik, saya bukan penggemar.
- Secara potensial tidak ada properti yang akan diberi nilai karena konstruktor kosong, jika penelepon tidak mengetahui, Anda berpotensi mendapatkan beberapa yang sangat tidak diinginkan dan sulit untuk diuji perilaku.
- Terlalu banyak properti! (dalam 30 kasus)
Saya merasa jauh lebih sulit untuk benar - benar mengetahui keadaan objek Foo
saat itu, sebagai pelaksana. Argumen dibuat "kita mungkin tidak memiliki informasi yang diperlukan untuk ditetapkan Prop5
pada saat pembangunan objek. Ok, saya kira saya bisa mengerti itu, tetapi jika itu hanya membuat Prop5
setter publik, tidak selalu hingga 30 properti di kelas.
Apakah saya hanya menjadi pemilih dan / atau gila karena menginginkan kelas yang "mudah digunakan" sebagai lawan dari "mudah untuk menulis (semuanya publik)"? Kelas-kelas seperti berteriak di atas kepada saya, saya tidak tahu bagaimana ini akan digunakan, jadi saya hanya akan membuat semuanya publik untuk berjaga-jaga .
Jika saya tidak terlalu pilih-pilih, argumen apa yang bagus untuk memerangi pemikiran seperti ini? Saya tidak pandai mengartikulasikan argumen, karena saya menjadi sangat frustrasi ketika mencoba menyampaikan pendapat saya (tentu saja tidak sengaja).
get
atau set
:-)