2015-04-21 12 views
7

Tôi mới trong thế giới FIX. Tôi đang viết một ứng dụng xử lý các thông báo FIX trong Java và cho rằng tôi đang sử dụng QuickFix/J. Tôi đã tải xuống DataDictionary từ trang chủ (http://quickfixengine.org/). Tôi đang sử dụng phiên bản 4.4Sự khác biệt giữa "nhóm" và "thành phần" trong QuickFix/J

Trong tệp xml tồn tại các nhóm và thành phần. Nhưng một thành phần có thể chứa các nhóm một lần nữa.

Sự khác biệt chính xác giữa chúng là gì?

Cảm ơn sự giúp đỡ của bạn !!

Trả lời

12

Thành phần không thực sự ... mọi thứ. Chúng giống như các macro trong FIX DataDictionary. Nhiều thư cần cùng một tập hợp các trường, do đó, thay vì chỉ định các trường giống nhau trong mọi thư, DD xác định thành phần mà các thư khác có thể bao gồm.

Một nhóm, mặt khác, là một điều rất thực tế. Đó là một chuỗi các trường lặp lại sẽ xuất hiện 0 hoặc nhiều lần trong một tin nhắn.

Giao diện lập trình của QuickFIX phần lớn bỏ qua các thành phần dưới dạng một khái niệm. Bạn không thể trích xuất một thành phần từ một tin nhắn, bởi vì một thành phần không phải là một khái niệm trong QF; bạn chỉ cần trích xuất các trường như bất kỳ trường nào khác.

Ví dụ giả thiết: Hai định nghĩa thông báo sau đây giống hệt nhau.

1: Với một thành phần

<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: Nếu không có một thành phần

<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> 

Thấy không? Một thành phần là khá nhiều chỉ là một vĩ mô.

Dù bằng cách nào nó được xác định, bạn chỉ cần gọi msg.GetHeater() (hoặc bất kỳ thứ gì).

+0

Cảm ơn bạn rất nhiều !!! Lời giải thích rất tốt! Bạn có thể giải thích cho tôi cách QuickFix (/ J) biết những trường nào chứa một nhóm không? Ví dụ: thành phần "Các bên" chỉ có một phần tử: Nhóm "NoPartyID". Tôi biết nhóm này là gì .. Trong tệp FIX44.xml (được tải xuống từ http://quickfixengine.org/), xuất hiện từ "NoPartyID" chỉ hai lần. Khi đã định nghĩa thành phần "Các bên" (dòng 2416) và định nghĩa của trường (dòng 5217).Làm thế nào biết Java các lĩnh vực của nhóm "NoPartyIDs"? Sẽ tốt hơn nếu xml-file sẽ có một thẻ , nơi nhóm sẽ được định nghĩa ?! – mrbela

+0

Um ... "NoPartyIDs" * là * một thẻ nhóm. Và nó chứa các trường của nhóm. –

+0

Có .. Nhưng điều này không được định nghĩa trong tệp XML, phải không? Vì vậy, nó phải được định nghĩa trong một số lớp Java trong việc thực hiện QuickFix ?! – mrbela

2

Từ FIXWiki for Components:

khối Component là tập hợp các lĩnh vực dữ liệu liên quan nhóm lại với nhau và được tham chiếu bởi tên khối thành phần trong thông điệp mà chúng được sử dụng trong Đôi khi, họ được gọi là "Nhóm"..

Các khối thành phần thực tế được xác định và sau đó được sử dụng lại trong các loại thông báo khác nhau. Đôi khi một nhóm lặp lại chỉ dành cho một thông điệp cụ thể và sau đó nó không được định nghĩa là một khối Thành phần.

Xem khối thành phần dưới dạng định nghĩa lại các trường. Khối thành phần như vậy có thể hoặc không thể chứa một nhóm các trường lặp lại.

Ví dụ lấy Parties component block được sử dụng trong nhiều loại thông báo khác nhau (xem "Được sử dụng trong" trên trang đó). Dễ dàng xác định một lần và sử dụng trong nhiều định nghĩa của tin nhắn.

Các vấn đề liên quan