Возможно, вы можете опубликовать пример кода?Немного трудно понять, что именно вы пытаетесь сделать, но я постараюсь ответить на некоторые ваши вопросы, комментарии.
"Идея состоит в том, что доменные объекты имеют специальные коллекции, которыезаполняется из источника данных при первом обращении к нему по требованию. Я думаю, это не совсем "DDD", но, похоже, оно работает ... "
Чем это отличается от отложенной загрузки?Зачем вам нужен особый тип коллекции?И как это соотносится с DDD?
Реально ли абстрагировать текстовый источник данных и источник данных, и при этом все еще работать хорошо и легко со всеми существующими структурами?Я думаю об этом неправильно?Это тупик?
Нет, это не так (это тупик).Вы можете легко создать модель предметной области, которая не имеет отношения к вашей технологии персистентности, но вам все равно нужно подумать об ограничениях выбранного вами преобразователя orm, например, EF не поддерживает перечисления, nhibernate do.Кроме того, что вы получаете от обобщения этого?Вы никогда не переключаете маппер, если выбрали его, и даже если вы это сделаете, у вас не должно возникнуть проблем с его переключением, если остальная часть вашего решения хороша (не разбрасывайте свой ISession / DbContext / что-либо вокруг и т. Д.).
«В чем разница шаблона репозитория (DDD) и моего DataContext?»
Если вы имеете в виду, например, EF DbContext, когда говорите «мой DataContext», то разница в том, чтоDbContext - это представление определенной технологии персистентности, в то время как репозиторий - абстракция постоянства, не зависящая от технологии.Это представление чего-то, что содержит ваши сущности, но не должно раскрывать технологию, используемую для этого (xml, база данных, хранилище файлов, оперативная память и т. Д.).
Как общее примечание, я хотел быне делай этого сам.Обобщения сложны и почти всегда являются пустой тратой времени.Разработчики любят обобщения и идею «повторного использования кода», но они редко привносят в решение проблемы нечто большее, чем просто запутывание кода и его сложность.Стремитесь создать что-то, что работает и обобщайте, как только вы начнете повторяться.Не пытайтесь создать это заранее, так как вы почти наверняка получите что-то бесполезное (или близко).Кроме того, я не вижу, что вы приносите на стол;Сегодня картографы orm ненавязчивы и просты в использовании.Вы также упомянули общий уровень представления, нет ничего более конкретного, чем представление, поэтому я не вижу в этом и пользы (но, может быть, если вы разместите некоторый код или объясните немного подробнее).