Question

J'ai deux fichiers CSV A et B. A est le référentiel master. J'ai besoin de lire ces fichiers, de cartographier les enregistrements de B à A et d'enregistrer les enregistrements mappés dans un autre fichier. La classe pour contenir des enregistrements est: disons. La classe pour contenir les enregistrements correspondants est, disons, 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;
}

Le scénario de cartographie va ainsi: Premièrement, contre chaque enregistrement de B, les enregistrements de A sont filtrés à l'aide de l'état, de la ville puis du code postal. Les enregistrements de A ainsi filtrés sont ensuite comparés à l'enregistrement de B. Cette comparaison se situe entre le champ de nom et est une comparaison de la meilleure correspondance utilisant un algorithme de chaîne floue. Le meilleur match est sélectionné et enregistré.

L'algorithme de correspondance de cordes donnera un pourcentage de correspondance. Ainsi, le meilleur résultat de toutes les matchs doit être sélectionné.

Maintenant que j'ai fait de mon mieux pour expliquer le scénario, je vais arriver au problème de conception. Ma conception initiale était de faire une classe de mapper, qui sera quelque chose comme ci-dessous:

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

Mais en regardant le design, il semble tout simplement être un emballage de classe par rapport à certaines méthodes. Je ne vois aucun design OO dedans. J'ai également estimé que le match () appartient plus à la classe de disques que la classe de mappeur.

Mais sur un autre look, j'ai vu la classe comme implémenter quelque chose ressemblant au modèle de référentiel.

Une autre façon, je pense, c'est de garder la classe de mapper, et de déplacer simplement la méthode Match () vers la classe de disques, quelque chose comme ceci:

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

Maintenant, je suis totalement confus dans ce scénario simple. Quel serait idéalement un bon design OO dans ce scénario?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top