Это правильное использование DTO?

Я пишу консольное приложение, которое выполняет извлечение большого количества данных из наборов записей хранимых процедур.Для каждого типа набора записей, с которым я работаю, у меня есть репозиторий, который использует 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 , например.

5
задан Chris Trombley 10 June 2011 в 18:28
поделиться