Domanda

Ho due file CSV A e B. A è il repository principale. Devo leggere quei file, mappare i record di B su A e salvare i record mappati su un altro file. La classe per tenere i record è, diciamo il record. La classe per tenere i record corrispondenti è, diciamo, 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;
}

Lo scenario di mappatura va così: in primo luogo, contro ogni record di B, i registri di A sono filtrati usando stato, città e poi zipcode. I record di un filtrato così filtrati vengono quindi confrontati con il record di B. Questo confronto è tra il campo Nome ed è un confronto migliore con un algoritmo di stringa fuzzy. La partita migliore è selezionata e salvata.

L'algoritmo di corrispondenza della stringa darà una percentuale di corrispondenza. Pertanto, il risultato migliore di tutte le partite deve essere selezionato.

Ora che ho fatto del mio meglio per spiegare lo scenario, arriverò al problema di progettazione. Il mio design iniziale era quello di creare una classe mapper, che sarà qualcosa di seguito:

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

Ma guardando il design, sembra semplicemente essere un involucro di classe su alcuni metodi. Non vedo alcun design oo in esso. Ho anche sentito che la partita () appartiene più alla classe di record rispetto alla classe Mapper.

Ma in un altro sguardo, ho visto la classe come implementazione di qualcosa che assomiglia al modello di repository.

Un altro modo in cui penso è mantenere la classe Mapper e basta spostare il metodo Match () alla classe di record, qualcosa del genere:

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.
  }
}

Ora sono totalmente confuso in questo semplice scenario. Quale sarebbe idealmente un buon design OO in questo scenario?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top