Điều này được thúc đẩy bởi câu trả lời này cho một câu hỏi riêng biệt .
Mẫu trình xây dựng được sử dụng để đơn giản hóa việc khởi tạo phức tạp, đặc biệt là với các tham số khởi tạo tùy chọn). Nhưng tôi không biết cách quản lý đúng cấu hình loại trừ lẫn nhau.
Đây là một Image
lớp học. Image
có thể được khởi tạo từ một tập tin hoặc từ một kích thước, nhưng không phải cả hai . Sử dụng các hàm tạo để thực thi loại trừ lẫn nhau này là hiển nhiên khi lớp đủ đơn giản:
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
}
}
Bây giờ giả sử Image
thực sự đủ cấu hình để mẫu xây dựng trở nên hữu ích, đột nhiên điều này có thể xảy ra:
Image image = new ImageBuilder()
.setStuff(stuff)
.setRange(range)
.setSize(size) // <---------- NOT
.setFilename(filename) // <---------- COMPATIBLE
.build();
Những vấn đề này phải được nắm bắt trong thời gian chạy thay vì tại thời gian biên dịch, đó không phải là điều tồi tệ nhất. Vấn đề là việc phát hiện một cách nhất quán và toàn diện những vấn đề này trong ImageBuilder
lớp có thể trở nên phức tạp, đặc biệt là về mặt bảo trì.
Làm thế nào tôi nên đối phó với các cấu hình không tương thích trong mẫu xây dựng?