Ini dimotivasi oleh jawaban ini untuk pertanyaan yang terpisah .
The pola pembangun digunakan untuk menyederhanakan inisialisasi yang kompleks, terutama dengan parameter inisialisasi opsional). Tapi saya tidak tahu bagaimana mengelola dengan benar konfigurasi yang saling eksklusif.
Ini Image
kelasnya. Image
dapat diinisialisasi dari file atau dari ukuran, tetapi tidak keduanya . Menggunakan konstruktor untuk menegakkan pengecualian bersama ini jelas ketika kelas cukup sederhana:
public class Image
{
public Image(Size size, Thing stuff, int range)
{
// ... initialize empty with size
}
public Image(string filename, Thing stuff, int range)
{
// ... initialize from file
}
}
Sekarang anggaplah Image
sebenarnya cukup dapat dikonfigurasi untuk pola builder menjadi berguna, tiba-tiba ini mungkin:
Image image = new ImageBuilder()
.setStuff(stuff)
.setRange(range)
.setSize(size) // <---------- NOT
.setFilename(filename) // <---------- COMPATIBLE
.build();
Masalah-masalah ini harus ditangkap pada saat dijalankan daripada pada waktu kompilasi, yang bukan hal terburuk. Masalahnya adalah bahwa secara konsisten dan komprehensif mendeteksi masalah ini di dalamImageBuilder
kelas bisa menjadi kompleks, terutama dalam hal pemeliharaan.
Bagaimana saya harus menangani konfigurasi yang tidak kompatibel dalam pola builder?