2

私は多くの異なる修正バージョン(4.2、4.3、4.4)を扱ういくつかのコードを書いています。私が抱えている問題は、ハンドラーオブジェクトを作成するときに、修正バージョンごとに異なるハンドラーを使用するため、コードの重複を余儀なくされることです。例えば

@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());
}

私が書いている実際のコードははるかに複雑です(私はいくつかのフィールドを取得してデータを操作しています)。振り返りに頼らずにこの重複を減らす方法を考えることはできません。

4

1 に答える 1

1

皮肉なことに、QuickFIX / Jをより簡単かつ安全に使用できるようにする機能のいくつかは、あなたが説明するような状況でも問題を引き起こす可能性があります。ハンドラーメソッドと生成されたメッセージクラスは型安全性をサポートするように設計されていますが、実際には型安全性を減らし、より動的なフィールドアクセスが必要です。生成されたクラスquickfix.Messageは、のサブクラスであるサブクラスですquickfix.FieldMap。FieldMapクラスには、フィールドデータを取得するためのパブリックアクセサーがあります。タイプセーフメッセージラッパーは、これらを使用してメッセージデータを取得します。

例えば、

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

これは、フィールドを含むすべてのメッセージで機能します。生成されたすべてのフィールドには、タグ番号を持つFIELD静的メンバーがあります。このquickfix.MsgTypeクラスには、メッセージのカスタム動的ディスパッチに役立つメッセージタイプの定数もあります。

MsgTypeなどのメッセージヘッダーフィールドにアクセスする場合は、message.getHeader()メソッドを介してこれらのフィールドにアクセスすることを忘れないでください。

ここにボーナスのヒントがあります。タイプセーフなメッセージラッパーが必要ない、または必要ない場合は、quickfix.MessageFactory基本的なquickfix.Messageオブジェクトを作成するだけの単純なカスタムを定義できます。これにより、着信メッセージを処理する際のパフォーマンスがわずかに向上します。

于 2012-04-26T11:08:57.323 に答える