質問

2つのCSVファイルAとBがあります。Aはマスターリポジトリです。これらのファイルを読み取り、BのレコードをAにマップし、マッピングされたレコードを別のファイルに保存する必要があります。記録を保持するクラスは、記録などです。一致したレコードを保持するクラスは、たとえばRecordMatchです。

class Record
{
  string Id;
  string Name;
  string Address;
  string City;
  string State;
  string Zipcode;
}

class RecordMatch
{
  string Aid;
  string AName;
  string Bid;
  string BName;
  double NameMatchPercent;
}

このようにマッピングシナリオは次のとおりです。まず、bの各レコードに対して、Aのレコードは状態、都市、次にzipcodeを使用してフィルタリングされます。このようにフィルタリングされたAのレコードは、Bのレコードと比較されます。この比較は名前フィールド間であり、ファジー文字列アルゴリズムを使用した最適な比較です。最高の一致が選択され、保存されます。

文字列マッチングアルゴリズムは、一致の割合を与えます。したがって、すべてのマッチの最良の結果を選択する必要があります。

シナリオを説明するために最善を尽くしたので、デザインの問題になります。私の最初のデザインは、マッパークラスを作ることでした。これは以下のようなものです。

class Mapper
{
  List<Record> ReadFromFile(File);
  List<Record> FilterData(FilterType);
  void Save(List<Record>);
  RecordMatch MatchRecord(Record A, Record B);
}

しかし、デザインを見ると、それは単にいくつかの方法よりもクラスのラッパーのようです。 OOデザインはありません。また、Match()はMapperクラスよりもレコードクラスに属していると感じました。

しかし、別の外観では、クラスはリポジトリパターンに似たものを実装していると見ていました。

別の方法は、Mapperクラスを維持し、Match()メソッドをレコードクラスに移動することです。

class Mapper
{
  List<Record> ReadFromFile(File);
  List<Record> FilterData(FilterType);
  void Save(List<Record>);
}

class Record
{
  string id;
  string name;
  string address;
  // other fields;

  public RecordMatch Match (Record record)
  {
    // This record will compare the name field with that of the passed Record.
    // It will return RecordMatch specifyin the percent of match.
  }
}

今、私はこの簡単なシナリオで完全に混乱しています。このシナリオでは、理想的には優れたOOデザインは何でしょうか?

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top