У меня есть то, что можно увидеть как причудливый гибрид IQueryable<T>
и IList<T>
наборов доменных объектов, попавших в мой стек приложений. Я стараюсь поддерживать как можно больше «поздних запросов» или «ленивых загрузок». Я делаю это двумя способами:
- Используя слой данных LinqToSql и передавая
IQueryable<T>
s через хранилища и на уровень моего приложения.
- Затем после того, как мой уровень приложения прошел
IList<T>
s, но там, где определенные элементы в графе объект / агрегат 'связаны' с делегатами , чтобы отложить их загрузку. Иногда даже содержимое делегата опирается на IQueryable<T>
источники и DataContext
вводится.
Пока это работает для меня.
Что невероятно сложно доказать, что этот дизайн действительно работает. То есть. Если я где-то побеждаю «ленивую» часть, и моя оценка / выполнение происходит рано, то все это пустая трата времени. Я хотел бы быть в состоянии TDD это как-то.
Я не знаю много о делегатах или безопасности потоков, поскольку это относится к делегатам, работающим с одним и тем же источником. Я хотел бы иметь возможность смоделировать DataContext
и как-то отследить оба метода отсрочки (SQL IQueryable<T>
и делегатов) загрузки, чтобы я мог иметь тесты, которые доказывают, что обе функции работают на разных уровнях / слои приложения / стека.
Поскольку крайне важно, чтобы отсрочка работала для того, чтобы дизайн имел какое-либо значение, я бы хотел, чтобы тесты проваливались, когда я нарушал дизайн на заданном уровне (отдельно от оперативной реализации). Это возможно?