Должны ли объекты сущности быть выставлены хранилищем? - PullRequest
8 голосов
/ 22 марта 2012

У меня есть репозиторий, который реализует интерфейс IRepository. Хранилище выполняет запросы к Entity Framework (от имени) приложения и напрямую возвращает полученный объект сущности.

Весь смысл в реализации IRepository заключается в том, чтобы в будущем его можно было использовать для разных репозиториев. Однако возвращение точных объектов-сущностей, возвращаемых Entity Framework, нарушит это. Это приемлемо?

Следовательно, должен ли репозиторий преобразовывать все объекты Entity Framework в бизнес-объекты, прежде чем предоставлять их приложению? Должны ли такие объекты реализовывать интерфейс или иметь общий базовый тип?

Ответы [ 3 ]

11 голосов
/ 22 марта 2012

Интерфейс репозитория должен работать только с объектами бизнеса / домена , то есть репозиторий отправляет и получает только объекты, известные приложению, объекты, которые не связаны с базовой реализацией доступа с постоянным доступом.

Объекты EF или Nhibernate моделируют постоянные данные НЕ доменные данные.Таким образом, IRepository не должен возвращать объект, который является деталью реализации ORM, но объект, который может использоваться приложением напрямую (либо объект домена, либо упрощенная модель представления, в зависимости от операции).

В реализации репозитория вы имеете дело с сущностями ORM, которые будут сопоставлены с соответствующими сущностями приложения (обычно с таким сопоставителем, как AutoMapper).Короче говоря, при разработке IRepository забудьте все о его реализации.Вот почему лучше спроектировать интерфейс, прежде чем решить, будет ли / какой ORM использоваться.

По сути, хранилище является шлюзом между контекстом домена приложения и контекстом сохраняемости, и приложение НЕ ДОЛЖНО быть связано с реализацией.детали хранилища.

1 голос
/ 22 марта 2012

Вам следует взглянуть на использование одного из шаблонов POCO для генерации ваших сущностей. Таким образом, ваши сущности не имеют особых зависимостей от Entity Framework и могут свободно передаваться между слоями. Это экономит много усилий по сравнению с поддержанием полностью отдельной модели предметной области и отображением между ними (если ваша модель предметной области не будет значительно отличаться от модели сущностей, в этом случае это будет иметь больше смысла).

0 голосов
/ 22 марта 2012

Если вы используете объекты POCO, вы можете предположить, что любой поставщик сделает аналогичную работу.Также помните, что вы возвращаете сущности, чьи свойства сопоставлены с базой данных.Таким образом, вы можете предположить, что, если у сущностей разные имена свойств для каждого поставщика (я не могу найти логическое объяснение разных имен), вы можете вернуть их из хранилища напрямую в бизнес.

...