次のようなフラットファイルに従業員のレコードが書き込まれるシナリオがあります。
flatFile.txt
============
1|name1|dept1|10000
2|name2|dept2|12000
3|name3|dept3|9500
....
....
ここで、このフラット ファイルを読み取り、上記の従業員レコードを毎回新しい xml ファイルに変換したいので、最後に次のデータを含む xml ファイルが必要です。
<EMPLOYEES>
<EMPLOYEE>
<ID>1</ID>
<NAME>name1</NAME>
<DEPARTMENT>dept1</DEPARTMENT>
<SALARY>10000</SALARY>
</EMPLOYEE>
<EMPLOYEE>
<ID>2</ID>
<NAME>name2</NAME>
<DEPARTMENT>dept2</DEPARTMENT>
<SALARY>12000</SALARY>
</EMPLOYEE>
...
...
</EMPLOYEES>
この概念を実装するには、次のようなデータの検証を処理する必要があります。
- ID と給与は数値でなければなりません
- 名前の長さは 20 未満にする必要があります
- フラット ファイルの 1 行には、上記の 4 つのフィールドが含まれている必要があります
いずれかの検証が失敗した場合は、次のようなエラー行番号とともに xml ファイルに反映する必要があります。
<NAME type="Error" Line="2"></NAME> (name length is greater than 20 in 2nd record of a flat file)
また
<EMPLOYEE type="Error" Line="1"></EMPLOYEE> (first record doesn't contains enough fields)
現在、アプリケーションは、コンポーネントが代替手段でプラグインできるように設計する必要があります。たとえば、区切り文字に基づいて入力ファイルを解析するために使用されるパーサーを、固定長として解析する別のパーサーに置き換えることができるはずです。
だからどういうわけか私はコンセプトをレイヤードな方法でデザインする必要があります
Parsing -> Validation -> Output Generation.
この概念を実装するために、次のように考えました。
- BufferedReader を使用してファイルからすべてのレコードを読み取り、StringTokenizer を使用してトークン化します。
- 各レコードの従業員オブジェクトを初期化し、コレクション (リスト) に追加します。
- エラー (フィールドの不一致またはその他の失敗した検証) を Map> に保持します。
- いくつかの XML ビルダー API を使用して、リストを xml に書き込むかマーシャリングします (どちらが最適かは不明です)。
実装を達成するためのより良い提案やヒントを誰かに教えてもらえますか?