Я пишу консольное приложение, которое выполняет извлечение большого количества данных из наборов записей хранимых процедур.Для каждого типа набора записей, с которым я работаю, у меня есть репозиторий, который использует EF с настраиваемыми сложными типами для извлечения данных:
public interface IBalanceSheetRepository
{
IEnumerable<BalanceSheetRecordDTO> GetBalanceSheetRecords();
}
public class BalanceSheetRepository : IBalanceSheetRepository
{
DBContext _context;
...
public IEnumerable<BalanceSheetRecordDTO> GetBalanceSheetRecords()
{
ObjectResult<BalanceSheetRecord> results = _context.GetBalanceSheet();
return results.Select(CreateBalanceSheetDTOFromDAO);
}
private static BalanceSheetRecordDTO CreateBalanceSheetDTOFromDAO(BalanceSheetRecord dao)
{
return new BalanceSheetRecordDTO { ... };
}
}
Здесь BalanceSheetRecord
- это сложный тип данных, который я создал в конструкторе. Я создал DTO, чтобы избежать связи, поскольку BLL не должен знать о типе BalanceSheetRecord
.
Вот мой вопрос: поскольку тип DTO используется в сигнатуре метода интерфейса репозитория, и поскольку мой BLL в конечном итоге будет использовать репозиторий и будет возвращена коллекция DTO, это, кажется, сквозная проблема. Поэтому у меня есть DTO, живущий в отдельной сборке «Инфраструктура» вместе с интерфейсами репо. Это хорошая практика для того, чего я пытаюсь достичь, или я где-то свернул не туда?
Также: это плохая практика обновлять контекст данных в моем репозитории? Допускается ли некоторая степень связи, когда оба компонента принадлежат DAL? Я хочу использовать DI, но он кажется более полезным для замены реализации репозитория DBContext на TestBalanceSheetRepository
, например.