2008-08-14 14 views
6

バイナリデータファイルを取得し、その一部をオブジェクトに分解し、その結果のデータをデータベースに格納するための設計パターンをお勧めしますか?バイナリファイルデータを解析してデータベースに格納するためのデザインパターン

XMLまたはタブ区切りのファイルを作成し、その代表的なオブジェクトに解析するために、同様のパターンを使用できると思います。

共通のデータ構造が含まれます:

(ヘッダー)(DataElement1)(DataElement1SubData1)(DataElement1SubData2)(DataElement2)(DataElement2SubData1)(DataElement2SubData2)(EOF)

を私は思います良いデザインには、ファイルの種類やヘッダーに含まれるいくつかの定義されたメタデータに基づいて解析の定義を変更する方法が含まれます。したがって、Factory Patternは、パーサー部分の全体的な設計の一部になります。

答えて

21
  1. ただ、技術が、それはすべてあなたのエッジケースが
  2. あなたはこれをやったら

に覆われていることを確認するために
  • は、ユニットテストの多くを書く気に来るものは何でも使って、あなたのファイルのパーサを書きますあなたは実際問題/解決策の合理的なアイデアを持っています。

    今のところあなたの頭の中には理論が浮かんでいますが、そのほとんどは誤っていると分かります。

    ステップ3:無作為にリファクタリングする。コードの半分を削除することが目的です

    最後のコードは既存のデザインパターンに似ています。そうしないと、新しいコードが作成されます。あなたはこの質問に答える資格があります:-)

  • 1

    戦略パターンは、あなたが見たいと思うかもしれません。戦略は、ファイル解析アルゴリズムです。

    次に、データベース挿入のための別の戦略が必要です。

    4

    私はオリオンエドワーズと完全に同意しています。これは通常私が問題にアプローチする方法です。しかし最近、私は狂気にいくつかのパターン(!)を見始めました。いくつかのbuilder(またはfactory)は、データの各部分を作成するために使用し、私は通常、interpreter(またはstrategy)のようなものを使用し、より複雑なタスクの場合

    ストリーミングデータの場合、パーサー全体はadapterのようになり、ストリームオブジェクトからオブジェクトストリーム(通常は単なるキュー)に適合します。

    たとえば、内部データ要素(インタープリタによって供給される)の内部でビルダーを使用する完全なデータ構造(先頭からEOFまで)のビルダーが1つあります。 EOFに遭遇すると、オブジェクトが放出される。

    しかし、工場出荷時の関数でswitch文で作成されたオブジェクトは、おそらく多くの小さなタスクにとって最も簡単な方法です。また、誰かがあなたの喉の並行性を揺さぶっているかどうかわからないので、私のデータオブジェクトを不変に保つのが好きです:)

    1

    LexとYACCを使用してください。次の10年間をこのテーマに専念させていない限り、毎回より良いコードを生成するでしょう。

    関連する問題