使用不同的修复版本快速修复重复代码

时间:2012-04-25 14:16:14

标签: java code-duplication quickfix

我正在编写一些处理许多不同修复版本的代码(4.2,4.3,4.4)。 我遇到的问题是,当编写处理程序对象时,我被迫重复代码,因为每个修复版本将使用不同的处理程序。 e.g。

@Handler    
public void executionHandler(quickfix.fix42.ExecutionReport execution, SessionID sessionID)  {
    System.out.println(execution.getClOrdID().getValue());
}

@Handler    
public void executionHandler(quickfix.fix43.ExecutionReport execution, SessionID sessionID)  {
    System.out.println(execution.getClOrdID().getValue());
}

我写的实际代码要复杂得多(我正在检索几个字段并操纵数据)。我想不出如何在不诉诸反思的情况下减少这种重复。

1 个答案:

答案 0 :(得分:1)

具有讽刺意味的是,使QuickFIX / J更易于使用和使用更安全的一些功能也会在您描述的情况下造成困难。处理程序方法和生成的消息类旨在支持类型安全,但实际上您需要更少的类型安全性和更动态的字段访问。生成的类是quickfix.Message的子类,它是quickfix.FieldMap的子类。 FieldMap类具有用于获取字段数据的公共访问器。 typesafe消息包装器使用它们来获取消息数据。

例如,

double averagePrice = message.getDouble(AvgPx.FIELD);

这适用于包含该字段的任何Message。所有生成的字段都有一个带有标签号的FIELD静态成员。 quickfix.MsgType类还有消息类型的常量,这对于自定义动态调度消息非常有用。

如果您要访问MsgType等邮件标题字段,请记住通过message.getHeader()方法访问这些字段。

这是奖金提示。如果您不需要或不需要类型安全消息包装器,则可以定义一个简单的自定义quickfix.MessageFactory,它只会创建基本的quickfix.Message对象。这将在处理传入消息时带来小的性能提升。