Я создал класс, основной задачей которого является получение данных из БД и сопоставление их с каким-либо объектом.Проблема в том, что один и тот же класс должен отображать разные устройства чтения данных на разные объекты.Итак, я попытался выбрать метод отображения с использованием делегатов.
Вот часть моего кода.См. Важные строки жирным шрифтом.
public class GetDetails<T>
{
**public delegate void DelegateMapping(T position, IDataReader reader);**
**public DelegateMapping mappingMethod;**
public T Get(T instance)
{
//Get IDs and Add to list
_db.ExecuteReader(storedProcedure.ToString(), CommandType.StoredProcedure, reader =>
{
while ( reader.Read() )
{
**mappingMethod(instance, reader);**
}
}, parameterList.ToArray());
return instance;
}
}
И этот класс вызывает и использует класс "GetDetails"
public class PositionDB : DbBase
{
public Position GetPositionDetails(string IDs)
{
GetDetails<Position> getIDs = new GetDetails<Position>(base.db);
getIDs.storedProcedure = StoredProcedure.NET_ADM_GetPositionDetails;
//Set the Delegated Method
**getIDs.mappingMethod = MappingPositionDetails;**
//Set Parameters
getIDs.parameterList.AddInParam("PositionIds", DbType.String, IDs);
//Return the PositionId Collection
return getIDs.Get(new Position());
}
**private void MappingPositionDetails(Position position, IDataReader reader)
{
position.Id = reader["CompPositionId"];
position.Description = reader["Description"];
position.ExpirationDate = reader["ExpirationDate"];
position.Title = reader["Title"];
}**
}
Код работает нормально.
Вопросы:
- Правильно ли я использовал делегат?
- Такое решение может вызвать проблемы в будущем (производительность)?
- Есть еще однолучшее решение?
Большое спасибо
Себастьян