Vì tôi tương đối mới với OOP/C# tôi không biết đúng mẫu để giải quyết vấn đề này:Mẫu thiết kế hướng đối tượng để tránh nếu/sau đó/tuyên bố khác
Tôi phải xây dựng kiến trúc plugin cho Nhà cung cấp IO khác nhau. Máy chủ đọc tên/kiểu nhà cung cấp cần thiết từ cấu hình, khi đó nhà cung cấp phải khởi tạo và tham số hóa.
Vì vậy, tôi có cơ bản giao diện này:
public interface IoProvider //(Base interface, all Providers implements this)
{
void Initialize();
void Execute();
}
public interface IFileProvider: IoProvider
{
string PropertyA { get; set; }
}
public interface ISmtpProvider : IoProvider
{
string PropertyB { get; set; }
string PropertyC { get; set; }
}
Như bạn thấy có nguồn gốc, các nhà cung cấp IO chuyên ngành có tính chất tham số bổ sung khác nhau mà giao diện cơ sở không có. Để tránh nếu/then/else hoặc chuyển báo cáo ý tưởng của tôi là sử dụng mẫu nhà máy. Nhưng nếu tôi hiểu điều này một cách chính xác thì nó sẽ không giải quyết được vấn đề nếu/sau đó của tôi vì trên máy khách, tôi phải kiểm tra kiểu dẫn xuất để cung cấp các thông số chính xác.
Vì vậy, dòng chảy chương trình trên máy chủ sẽ là một cái gì đó như thế này: chủ đọc cấu hình, được Tên/Loại cần cung cấp chủ gọi Nhà máy và được các nhà cung cấp
Nhưng làm thế nào tránh điều này - là có một mô hình để giải quyết điều này mà không cần nếu/thì/khác?
If (provider == typeOf(IFileProvider))
PropertyA = value
else if (provider == typeOf(ISmtpProvider))
PropertyB = value
PropertyC = value
Elseif …
có gì sai với 'if/else'? –
Tôi thích bản đồ cho loại điều này nhưng các nhà máy thường có các câu lệnh chuyển đổi lớn. Tại sao bạn cảm thấy cần phải loại bỏ nó? –
tôi đã học được điều này là phong cách mã hóa xấu. không chỉ có 2 loại nhà cung cấp, tại thời điểm này có 5 nhà cung cấp khác nhau. – Radioactive