Тема может показаться, что этот вопрос уже опубликован, но мой фрагмент кода и проблема разные. Пожалуйста, взгляните на него. У меня есть 20-20 таблиц Sql, из которых я создал свой класс POCO в своем приложении. Каждая из этих таблиц содержит около 4-5 общих столбцов, в которые мне нужно заполнить некоторые записи в приложении, остальные столбцы таблицы уже заполнены данными XML, отправленными каким-либо другим приложением. Только 4-5 общих столбцов каждой таблицы я пытаюсь заполнить приложение, как показано ниже.C# Избегайте повторяющегося кода и используйте Generic
private List<Software> GetSoftwareEntityData(Information request, DateTime scanDateTime)
{
List<Software> Data = new List<Software>();
int SrNo = 0;
foreach (var item in request.Software)
{
Software d = new Software();
d = item;
d.DCDTime = DateTime.Now;
d.LastModDTime = scanDateTime;
d.ID = request.Id;
d.ScanDateTime = scanDateTime;
d.SrNo = ++SrNo;
Data.Add(d);
}
return Data;
}
private List<Users> GetUsersEntityData(Information request, DateTime scanDateTime)
{
List<Users> Data = new List<Users>();
int SrNo = 0;
foreach (var item in request.Users)
{
Users d = new Users();
d = item;
d.DCDTime = DateTime.Now;
d.LastModDTime = scanDateTime;
d.ID = request.Id;
d.ScanDateTime = scanDateTime;
d.SrNo = ++SrNo;
Data.Add(d);
}
return Data;
}
Точно так же я написал код для 22 таблиц каждого и эти функции называют, когда я имею дело с этим конкретным набором объекта.
Как создать общий метод, чтобы я мог избавиться от 22 функций, которые имеют повторяющийся код?
Я также размещаю свой информационный класс ниже.
public class Information
{
public List<Software> Software{get;set;}
public List<Users> Users{get;set;}
}
Итак, теперь мой класс «Программное обеспечение и пользователи» выглядит как ниже с реализацией интерфейса ICommonColumns.
public interface ICommonColumns
{
DateTime DCDTime{get;set;}
DateTime LastModDTime{get;set}
.....
and others common fields
}
public class Software : ICommonColumns
{
....
}
public class Users : ICommonColumns
{
....
}
Вы можете обобщить все b ut 'foreach (var item in request.Software)' строка довольно легко. У вас может быть общая функция, обрабатывающая все, кроме этой строки, или, возможно, вы можете сделать этот бит с Reflection, но я не уверен, как это будет сделано. – RBarryYoung
Я думаю, что в вашем случае лучший подход состоял бы в том, чтобы извлечь эти поля в другую таблицу, по крайней мере, это то, что я бы сделал, но если вы работаете с устаревшими таблицами, и вы не можете изменить логику, посмотрите на это link, он показывает, как реализовать общий репозиторий: http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle – Spluf
Итак, foreach (var item in request.Software) выглядит для меня проблемой. Как бы я это обобщил? –