【发布时间】:2010-06-19 02:48:23
【问题描述】:
当我浏览 SO 时,我遇到了一个关于 handling multiple message types 的问题。我担心的是 - 我如何以简洁的方式加载这样的消息?我决定有一个单独的类,它的方法每次调用时都会加载一条消息。此方法应创建具体消息类型(例如 AlphaMessage、BetaMessage、GammaMessage 等)的新实例并将其作为消息返回。
class MessageLoader
{
public Message Load()
{
// ...
}
}
方法中的代码对我来说看起来真的很糟糕,我非常想重构它/摆脱它:
Message msg = Message.Load(...); // load yourself from whatever source
if (msg.Type == MessageType.Alpha) return new AlphaMessage(msg);
if (msg.Type == MessageType.Beta) return new BetaMessage(msg);
// ...
事实上,如果整个设计看起来过于凌乱,而你们有更好的解决方案,我已经准备好重新构建整个设计。
如果我的描述过于混乱,请告诉我缺少什么,我将编辑问题。谢谢大家。
编辑: 我不喜欢这段代码的地方是我必须创建一个 Message 的实例(因为它知道如何加载自己),然后必须用具体的消息类型来装饰它(因为装饰器知道如何解释 msg 的 Data 属性)。也许这会使问题更清楚一些。
【问题讨论】:
-
不确定您的问题是什么。这看起来像一个非常标准的工厂模式,您可以更改为 switch case 而不是 if 语句,但几乎是一样的。也许我误解了你的问题。
-
@CkH:我只是不喜欢我必须创建一个 Message 实例(因为它知道如何加载自己)然后必须用具体的消息类型来装饰它(因为装饰器知道如何解释 msg 的 Data 属性)
标签: c# .net design-patterns architecture