Нужен хороший шаблон для сопоставления сущностей между двумя источниками данных.C#

Место общения программистов C#
Ответить
Anonymous
 Нужен хороший шаблон для сопоставления сущностей между двумя источниками данных.

Сообщение Anonymous »

Я столкнулся с очень простой проблемой и не могу найти простого решения. Я ищу элегантный шаблон для сопоставления данных между двумя источниками данных
SourceA SourceB
ClassA1 -> ClassB1
КлассA2 -> КлассB2
КлассA3 -> КлассB3
и т. д.
У меня есть статический класс с перегруженными методами, сопоставляющими данные между классами:

Код: Выделить всё

public static class Mapper{

public static ClassB1 Map(ClassA1){
return new ClassB1();
}

public static ClassB2 Map(ClassA2){
return new ClassB2();
}

// etc.
}
Мне нужен простой шаблон, который будет работать в общем стиле, например

Код: Выделить всё

public void ProcessEntity(string EntityNameInSourceA, string EntityNameInSourceB){
List dataA = Source1.GetData(EntityNameInSourceA);
List dataB = Mapper.Map(dataA);
Source2.SaveData(dataB);
}
и используйте его

Код: Выделить всё

public void Main(){
ProcessEntity("TableA1", "TableB1");
ProcessEntity("TableA2", "TableB2");
ProcessEntity("TableA3", "TableB3");
}
чтобы я мог просто добавить новую пару классов, изменив класс Mapper и добавив новую строку

Код: Выделить всё

ProcessEntity("TableA4", "TableB4");
Проблема в том, что я не могу использовать этот Mapper.Map в универсальном методе, поскольку он требует, чтобы классы были указаны во время компиляции.
Ну , я могу
  • Использовать библиотеку AutoMapper
  • Использовать оператор if для предварительного определения типов (не проверял, работает ли это) кстати)

Код: Выделить всё

if (typeof(TA) == typeof(ClassA1)){
ClassB1 dataB = Mapper.Map(dataA)
}
  • Использовать шаблон адаптера, который в данном случае мне кажется тяжеловесным
Тем не менее, я считаю, что с самого начала делаю что-то неправильно, и существует какое-то прекрасное решение. Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ta-sources
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»