Tôi đã có GOF ngồi trên bàn của tôi ở đây và tôi biết phải có một số mẫu thiết kế giải quyết được vấn đề tôi đang gặp, nhưng tôi không thể hình dung ra .Mẫu thiết kế để xử lý nhiều loại tin nhắn
Vì mục đích đơn giản, tôi đã thay đổi tên của một số giao diện mà tôi đang sử dụng.
Vì vậy, đây là vấn đề, ở một bên của dây, tôi có nhiều máy chủ gửi các loại tin nhắn khác nhau. Ở phía bên kia của dây tôi có một khách hàng cần để có thể xử lý tất cả các loại tin nhắn khác nhau.
Tất cả thư thực hiện cùng giao diện phổ biến IMessage. Vấn đề của tôi là, khi khách hàng nhận được một IMessage mới, làm thế nào để nó biết loại IMessage của nó nhận được?
Tôi cho rằng mình có thể làm điều gì đó như sau, nhưng điều này chỉ FEELS khủng khiếp.
TradeMessage tMessage = newMessage as TradeMessage;
if (tMessage != null)
{
ProcessTradeMessage(tMessage);
}
OrderMessage oMessage = newMessage as OrderMessage;
if (oMessage != null)
{
ProcessOrderMessage(oMessage);
}
Ý nghĩ thứ hai là thêm một thuộc tính vào IMessage gọi là MessageTypeID, nhưng điều đó sẽ yêu cầu tôi viết một cái gì đó như sau, cũng FEELS khủng khiếp.
TradeMessage tMessage = new TradeMessage();
if (newMessage.MessageTypeID == tMessage.MessageTypeID)
{
tMessage = newMessage as TradeMessage;
ProcessTradeMessage(tMessage);
}
OrderMessage oMessage = new OrderMessage();
if (newMessage.MessageTypeID == oMessage.MessageTypeID)
{
oMessage = newMessage as OrderMessage;
ProcessOrderMessage(oMessage);
}
Tôi biết vấn đề chung này đã được giải quyết một triệu lần, vì vậy phải có một cách đẹp hơn giải quyết vấn đề của việc có một phương pháp mà có một giao diện như một tham số, nhưng cần kiểm soát dòng chảy khác nhau dựa trên lớp nào đã triển khai giao diện đó.
tôi đã thêm một trả lời tương tự như một trong những bạn chấp nhận rằng hoạt động tắt của gợi ý @ Grianon của mà tôi nghĩ rằng bạn sẽ tìm thấy các công trình tốt bằng cách sử dụng công văn đôi. – SwDevMan81