2015-04-21 2 views
7

Я новичок в мире FIX. Я пишу приложения, обрабатывающие сообщения FIX на Java, и для этого я использую QuickFix/J. Я загрузил DataDictionary с главной страницы (http://quickfixengine.org/). Я использую версию 4.4Разница между «группой» и «компонентом» в QuickFix/J

В xml-файле существуют группы и компоненты. Но компонент может снова содержать группы.

В чем же отличие между ними?

Спасибо за помощь!

ответ

12

Компоненты на самом деле не ... вещи. Они похожи на макросы в FIX DataDictionary. Многим сообщениям нужен один и тот же набор полей, поэтому вместо указания одинаковых полей в каждом сообщении DD определяет компонент, который могут включать другие сообщения.

Группа, с другой стороны, является очень реальной вещью. Это повторяющаяся последовательность полей, которая будет отображаться 0 или более раз в сообщении.

Интерфейс программирования QuickFIX в значительной степени игнорирует компоненты как концепцию. Вы не можете извлечь компонент из сообщения, потому что компонент не является концепцией в QF; вы просто извлекаете поля, как любое другое поле.

Гипотетический пример: Следующие два определения сообщений являются точно такими же.

1: С компонентом

<message name="Automobile" msgtype="X" msgcat="app"> 
    <field name="Wheel" required="Y"/> 
    <field name="Bumper" required="Y"/> 
    <component name="Dashboard" required="Y"/> 
</message> 

<component name="Dashboard"> 
    <field name="Radio" required="Y"/> 
    <field name="AirConditioner" required="Y"/> 
    <field name="Heater" required="Y"/> 
</component> 

2: Без компонента

<message name="Automobile" msgtype="X" msgcat="app"> 
    <field name="Wheel" required="Y"/> 
    <field name="Bumper" required="Y"/> 
    <field name="Radio" required="Y"/> 
    <field name="AirConditioner" required="Y"/> 
    <field name="Heater" required="Y"/> 
</message> 

See? Компонент - это всего лишь макрос.

В любом случае это определено, вы просто в конечном итоге вызываете msg.GetHeater() (или что-то еще).

+0

Спасибо большое !!! Очень хорошее объяснение! Можете ли вы объяснить мне, как QuickFix (/ J) знает, какие поля содержат группу? Например, компонент «Стороны» имеет только один элемент: группа «NoPartyID». Я знаю, что это за группа. В файле FIX44.xml (скачан из http://quickfixengine.org/) слово «NoPartyIDs» появляется только дважды. Однажды в определении компонента «Стороны» (строка 2416) и определении поля (строка 5217).Как узнать Java в полях группы «NoPartyID»? Было бы лучше, если бы xml-файл имел бы -tag, где группа была бы определена ?! – mrbela

+0

Um ... "NoPartyIDs" * - * тег группы. И он содержит поля группы. –

+0

Да .. Но это не определено в XML-файле, не так ли? Поэтому он должен быть определен в некоторых классах Java в реализации QuickFix ?! – mrbela

2

От FIXWiki for Components:

компонентные блоки представляют собой наборы связанных полей данных, сгруппированных вместе, и ссылаются на имя блока компонента в сообщениях, в которых они используются Иногда они называются «Группы»..

Компонентные блоки практичны для определения, а затем повторно используются в разных типах сообщений. Иногда повторяющаяся группа предназначена только для одного конкретного сообщения, а затем она не определяется как компонентный блок.

Просмотреть компонентный блок в качестве многоразового определения полей. Такой блок компонентов может содержать или не содержать повторяющуюся группу полей.

Например, возьмите Parties component block, который используется во многих различных типах сообщений (см. «Используемое значение» на этой странице). Легко определить один раз и использовать во многих определениях сообщений.