Saya menggunakan C #, dan ini adalah pendekatan saya. Mempertimbangkan:
class Foo
{
// private fields only to be written inside a constructor
private readonly int i;
private readonly string s;
private readonly Bar b;
// public getter properties
public int I { get { return i; } }
// etc.
}
Opsi 1. Pembuat dengan parameter opsional
public Foo(int i = 0, string s = "bla", Bar b = null)
{
this.i = i;
this.s = s;
this.b = b;
}
Digunakan sebagai mis new Foo(5, b: new Bar(whatever))
. Bukan untuk Java atau C # versi sebelum 4.0. tetapi tetap layak untuk ditampilkan, karena ini adalah contoh bagaimana tidak semua solusi bersifat tanpa bahasa.
Opsi 2. Pembuat mengambil objek parameter tunggal
public Foo(FooParameters parameters)
{
this.i = parameters.I;
// etc.
}
class FooParameters
{
// public properties with automatically generated private backing fields
public int I { get; set; }
public string S { get; set; }
public Bar B { get; set; }
// All properties are public, so we don't need a full constructor.
// For convenience, you could include some commonly used initialization
// patterns as additional constructors.
public FooParameters() { }
}
Contoh penggunaan:
FooParameters fp = new FooParameters();
fp.I = 5;
fp.S = "bla";
fp.B = new Bar();
Foo f = new Foo(fp);`
C # dari 3.0 ke atas membuatnya lebih elegan dengan sintaks penginisialisasi objek (secara semantik setara dengan contoh sebelumnya):
FooParameters fp = new FooParameters { I = 5, S = "bla", B = new Bar() };
Foo f = new Foo(fp);
Opsi 3:
Rancang ulang kelas Anda agar tidak membutuhkan banyak parameter. Anda dapat membagi tanggung jawabnya menjadi beberapa kelas. Atau berikan parameter bukan ke konstruktor tetapi hanya ke metode tertentu, sesuai permintaan. Tidak selalu dapat dijalankan, tetapi jika memungkinkan, itu layak dilakukan.