阅读了一篇有趣的文章后,我对此有几个问题。请参考[zero-turn-around]上的常见陷阱#8:假装Java更像C(即不理解OOP)。
我同意作者对于这个陷阱的解决方案。我的代码也面临着类似的问题(滥用instanceof)。但是,我无法按照作者建议的方式实现代码。我的场景如下:
1. 我使用JMS作为消息总线。 2. 消息在系统中流动。侦听器通常侦听消息。 3. 所有消息都有一个单一的IMessage父对象。 4. 我使用instanceof来区分消息。 5. 侦听器通常执行特定于领域的业务逻辑。
如果我同意作者的解决方案,我将不得不在Message类中实现特定于领域的业务逻辑,这会使我的轻量级消息对象臃肿。不仅如此,我的消息对象现在将具有业务(领域)行为,这我认为是不公平的,因为它们只是消息对象。
那么,这个问题的合理解决方案是什么呢?下面是示例代码。
我同意作者对于这个陷阱的解决方案。我的代码也面临着类似的问题(滥用instanceof)。但是,我无法按照作者建议的方式实现代码。我的场景如下:
1. 我使用JMS作为消息总线。 2. 消息在系统中流动。侦听器通常侦听消息。 3. 所有消息都有一个单一的IMessage父对象。 4. 我使用instanceof来区分消息。 5. 侦听器通常执行特定于领域的业务逻辑。
如果我同意作者的解决方案,我将不得不在Message类中实现特定于领域的业务逻辑,这会使我的轻量级消息对象臃肿。不仅如此,我的消息对象现在将具有业务(领域)行为,这我认为是不公平的,因为它们只是消息对象。
那么,这个问题的合理解决方案是什么呢?下面是示例代码。
public void onMessage(IMessage mssg)
{
if(mssg instanceof MoPn){
...
} else if(mssg instance of MoZn){
...
} else if(mssg instance of MoLn){
...
}
}