オブジェクト指向のデザイン
-
30-10-2019 - |
質問
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デザインは何でしょうか?
正しい解決策はありません
所属していません StackOverflow