3

「スーパークラスとn個のサブクラスがあり、提供されたデータに基づいて、サブクラスの1つのオブジェクトを返す必要がある場合、ファクトリパターンを使用します」と言われているように

状況: 20 のクライアントがあり、時間の経過とともにさらに追加できます。それぞれが、データが抽出されてデータベースに挿入されるファイルを提供します。すべてのクライアントには、ファイルを維持する独自のスタイルがあります。つまり、データ フィールドはさまざまな場所にあります。

解決策: これには、ファクトリデザインパターンを使用する必要があると思います。20個のクラスを作成し、すべてのクラスに、ファイル内のどの場所からどのように抽出する必要があるかなど、すべてのフィールドの独自の実装があります。新しいクライアントが追加されたら、新しいクラスを作成するだけで完了です。他の変更は必要ありません。

私はここまで正しいですか?

複雑さ: 問題は、クライアントが提供するファイルが 4 つの形式 (PDF、XLS(X)、HTML、TXT) のいずれかである可能性があることです。これらの形式からテキストを抽出するエンジンは、pdftoXML を使用して PDF を XML などに抽出するように、静的である必要があります。PDF を XML に変換するだけの別のエンジン クラスを作成しない場合は、その機能を書き直す必要があります。 PDF でファイルを提供するすべてのクライアントのクラスでの PDF テキスト抽出。エクセル抽出エンジンも同様です。

質問: これらのエンジンをファクトリー パターンに組み込むにはどうすればよいですか? エンジンクラスは静的で、たとえばpdfを処理する必要があるサブクラスは、必要なデータを取得するためにpdfクラスの抽出メソッドを呼び出す必要がありますか?

私は自分自身を明確にしたことを願っています、ありがとう

4

3 に答える 3

1

ここでは (少なくとも) 2 つのことが行われています。

  1. さまざまなファイル形式からテキストを抽出する
  2. クライアント固有のルールに従ってこのテキストを解析します。

これらの機能を完全に分離します。おそらく、テキスト抽出用と解析用の 2 つのファクトリを使用することもできます。解析を行うクライアント固有のコードは、テキストが PDF や CSV からのものであること、または http などを介してパイプされたことを知る必要はありません。テキストの解析について知る必要があるだけです。

お役に立てれば。

于 2012-07-11T18:31:38.100 に答える
1

これは Factory Method の良い使い方だと思いますが、抽出アルゴリズムをモデル化するためにクライアント クラス階層を使用しようとしないでください。パターンに関しては、Strategy を使用して、適切な種類の抽出アルゴリズムでクライアント オブジェクトを動的に構成できます。

于 2012-07-11T18:07:12.730 に答える
1

まず、いくつか質問があります。これらは、推奨される解決策を変更する可能性があります。

  1. 20 のクライアントのそれぞれに 1 つの FileFormat がありますか?
  2. サブクラス間で共通 (動作/メソッド) は何ですか?
  3. 別の FileFormat を使用するようにサブクラスが変更される可能性はありますか?

サブクラスがファイル タイプを切り替える必要がない最も単純なソリューションでは、一連の抽象クラス PdfProvider、XlsProvider、HtmlProvider、および TxtProvider によってサブクラス化された抽象 ContentProvider を使用できるようになりました。このクラスの中間層は、ファイル形式固有の機能を実装します。次に、20 個の「クライアント」クラスが、適切な FileFormat 固有のベースから継承されます。

于 2012-07-12T12:34:37.387 に答える