我有两个 csv 文件 A 和 B。A 是主存储库。我需要读取这些文件,将 B 的记录映射到 A 并将映射的记录保存到另一个文件。保存记录的类是,比如 Record。保存匹配记录的类是 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 的记录。然后将这样过滤的 A 的记录与 B 的记录进行比较。这种比较是在名称字段之间进行的,并且是使用模糊字符串算法的最佳匹配比较。选择并保存最佳匹配。
字符串匹配算法将给出匹配百分比。因此,必须从所有匹配中选择最佳结果。
现在我已经尽力解释了这个场景,我将进入设计问题。我最初的设计是制作一个 Mapper 类,如下所示:
class Mapper
{
List<Record> ReadFromFile(File);
List<Record> FilterData(FilterType);
void Save(List<Record>);
RecordMatch MatchRecord(Record A, Record B);
}
但看看设计,它似乎只是一些方法的类包装器。我没有看到任何面向对象的设计。我也觉得 Match() 更多地属于 Record 类而不是 Mapper 类。
但从另一个角度来看,我看到这个类实现了类似于 Repository 模式的东西。
我认为另一种方法是保留 Mapper 类,只需将 Match() 方法移至 Record 类,如下所示:
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 设计?