Я думаю, что я очень близко собираю репозиторий MVC, но просто разваливаюсь на краю. Я создал проект MVC с репозиторием и успешно возвращаю данные, но не так точно, как это относится к DDD. Скажите, пожалуйста, где я ошибаюсь в отношении строгой сборки DDD. Я думаю, если темы слишком широкие, предложение книги будет в порядке. Надеюсь, что я достаточно конкретный в своем вопросе.В MS MVC классы Poco должны быть определены в пространстве имен Models, но вне класса репозитория?
Это был один вопрос, но я выделил их для ясности: вы создаете единое пространство имен для всех классов хранилищ, называемых MyStore.Models? Создать класс репозитория для каждого объекта, такого как Product, в пространстве имен Models? Вы помещаете Pocos в свои классы в пространстве имен Models, но не являетесь частью класса Repository?
В настоящее время я использую Pocos для вырезания сущностей из операторов Linq, возвращая их группы внутри оберток IQueryable. Думаю, вы бы как-то удалили IQueryable и заменили его на какой-то тип Lazy load? Как вы ленивы загружаться, не зависимо от исходного Linq до Sql?
public IQueryable<Product> GetProducts(...) {
return (from p in db.Products
where ...
select new myProductPoco { // Cut out a Poco from Linq
ID = p.ID,
Name = p.Name,
...
});
}
Затем ссылки на эти в представлениях MVC в пределах директивы унаследуют страницы:
System.Web.Mvc.ViewPage<IQueryable<MyStore.Models.Product>>
Однако вложенные дженерики выглядит неправильно. Я предполагаю, что это требует повторного фактора. Где вы определяете классы View Model, содержащие ссылки на Entities? В классе контроллера (вложенный класс)?
Насколько я понимаю, вы должны определить классы своей Domain Model отдельно от вашего репозитория. Кроме того, вы должны определить ваши классы ViewModel отдельно от них (классы модели просмотра - это подмножества классов Domain Model, поэтому вы не отправляете клиенту ненужные данные. :) –
Ну, мой первый комментарий на самом деле неверен, теперь я знаю больше. Вы не создаете классы ViewModel, которые отражают части моделей доменов, вы просто заполняете поля, которые вам нужны, в существующей модели домена. Довольно сумасшедший. Все еще не уверен в совокупных корнях, которые используют IList для отношений. Похоже, что они могут быть загружены большими объемами из базы данных. –