Pregunta

Tengo dos archivos CSV A y B. A es el repositorio maestro. Necesito leer esos archivos, asignar los registros de B a A y guardar los registros asignados en otro archivo. La clase To Hold Registros es, digamos Registro. La clase para mantener los registros coincidentes es, por ejemplo, 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;
}

El escenario de mapeo va así: primero, con cada registro de B, los registros de A se filtran utilizando el estado, la ciudad y luego el zipcode. Los registros de un filtrado así se comparan con el registro de B. Esta comparación es entre el campo Nombre, y es una comparación de mejor partido utilizando un algoritmo de cadena difusa. La mejor coincidencia se selecciona y guarda.

El algoritmo de coincidencia de cadenas dará un porcentaje de partido. Por lo tanto, se debe seleccionar el mejor resultado de todos los partidos.

Ahora que hice todo lo posible para explicar el escenario, llegaré al problema de diseño. Mi diseño inicial era hacer una clase mapeador, que será algo como a continuación:

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

Pero mirando el diseño, simplemente parece ser un envoltorio de clase sobre algunos métodos. No veo ningún diseño de OO en él. También sentí que el partido () pertenece más a la clase de registro que a la clase Mapper.

Pero en otro aspecto, vi a la clase como implementando algo parecido al patrón de repositorio.

Otra forma en que creo que es mantener la clase Mapper y simplemente mover el método Match () a la clase de registro, algo como esto:

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

Ahora estoy totalmente confundido en este escenario simple. ¿Cuál sería idealmente un buen diseño OO en este escenario?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top