QuickFIX/J 组与组件

QuickFIX/J Group vs Component

有什么区别,正确的代码或最好的代码?
两个版本的代码都可以正常工作,但我认为这些组件可能有一些我无法理解的有用的东西。

第一个:

MarketDataRequest m = new MarketDataRequest();
quickfix.fix50sp2.component.MDReqGrp cmp = new quickfix.fix50sp2.component.MDReqGrp();
quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes group = new quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes();

  cmp.addGroup(group);
  m.set(cmp);

第二个:

MarketDataRequest m = new MarketDataRequest();
quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes group = new quickfix.fix50sp2.MarketDataRequest.NoMDEntryTypes();

  m.addGroup(group)

对于你给出的例子来说没有太大区别。您只需要再进行一次间接操作即可将组件添加到消息中,而不是直接添加重复组。

但是,有些组件包含不止一个重复组。以 InstrmtMDReqGrp 为例,其中包含一些子组件和重复组。

使用组件优于单个 fields/groups 的一个优势体现在想要复制字段时。然后,您可以分别使用组件的方法 copyFrom(FieldMap fields)copyTo(FieldMap fields)。这些方法将一次性复制组件的所有字段和组。

示例:

    @Test
    public void testComponent() throws Exception {
        final Instrument instrument = new Instrument();
        instrument.set(new Symbol("DELL"));
        instrument.set(new CountryOfIssue("USA"));
        instrument.set(new SecurityType(SecurityType.COMMON_STOCK));

        final quickfix.fix44.NewOrderSingle newOrderSingle = new quickfix.fix44.NewOrderSingle();
        newOrderSingle.set(instrument);

        final quickfix.fix44.ExecutionReport executionReport = new quickfix.fix44.ExecutionReport();
        executionReport.setComponent(newOrderSingle.getInstrument());

        System.out.println("NOS: " + newOrderSingle.toString().replace('[=10=]1', '|'));
        System.out.println("ER:  " + executionReport.toString().replace('[=10=]1', '|'));
    }

输出:

NOS: 8=FIX.4.4|9=28|35=D|55=DELL|167=CS|470=USA|10=233|
ER:  8=FIX.4.4|9=28|35=8|55=DELL|167=CS|470=USA|10=221|