2009-12-02 2 views
1

Я думаю, что я очень близко собираю репозиторий 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? В классе контроллера (вложенный класс)?

ответ

2

В качестве рекомендаций книги, попробуйте Eric Evan's Domain-Driven Design и, возможно, Refactoring от Martin Fowler.

+0

Насколько я понимаю, вы должны определить классы своей Domain Model отдельно от вашего репозитория. Кроме того, вы должны определить ваши классы ViewModel отдельно от них (классы модели просмотра - это подмножества классов Domain Model, поэтому вы не отправляете клиенту ненужные данные. :) –

+0

Ну, мой первый комментарий на самом деле неверен, теперь я знаю больше. Вы не создаете классы ViewModel, которые отражают части моделей доменов, вы просто заполняете поля, которые вам нужны, в существующей модели домена. Довольно сумасшедший. Все еще не уверен в совокупных корнях, которые используют IList для отношений. Похоже, что они могут быть загружены большими объемами из базы данных. –

1

Также добавляйте Domain Driven Design Quickly изготовленный InfoQ. Это бесплатно для загрузки или 30 долларов в печати.

«Домен-Driven Design Быстро был производства InfoQ.com, суммированы в основном Абель Аврам и Флойд Маринеску главным редактором. Специальные благодаря Эрик Эванс за его поддержку и Владимира Gitlevich и Дана Bergh Johnsson для своих подробных обзоров. Цель этой книги - получить введение в Domain-Driven Создайте как можно больше рук, , чтобы помочь ему стать основным ». - InfoQ

Смежные вопросы