Дизайн хранилища для сложных объектов? - PullRequest
1 голос
/ 11 апреля 2011

Каков наилучший способ проектирования хранилищ для сложных объектов, при условии использования ORM, такого как NHibernate или Entity Framework?

Я создаю приложение с использованием Entity Framework 4. Приложение использует сложные объекты:объект Foo содержит коллекцию объектов Bar в свойстве Foo.Bars и т. д.В прошлом я бы создал FooRepository, а затем BarRepository и вставил бы ссылку на BarRepository в конструктор FooRepository.

Когда запрос передается в FooRepository, он будет вызывать BarRepository по мере необходимости для создания свойства Foo.Bars для каждого объекта Foo.А когда объект Foo передается в FooRepository для сохранения, хранилище вызывает BarRepository для сохранения объектов в свойстве Foo.Bars.

Мой вопрос довольно прост:общепринятый способ настройки хранилищ?Есть ли лучший подход?Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

В дизайне, управляемом доменом, существует концепция «корневого агрегата». Принятый ответ на связанный вопрос содержит хорошую информацию о том, что это такое и как вы будете использовать его в своем дизайне. Я не знаю о Entity Framework, но NHibernate не требует описанного вами шаблона использования. До тех пор, пока все вложенные объекты и их отношения правильно отображаются в таблицы, сохранение совокупного корня также сохранит все его дочерние объекты. Исключение составляют случаи, когда вложенный объект имеет определенную бизнес-логику, которую необходимо выполнить как часть его доступа или постоянства. В этом случае вам нужно будет передать «дочерние» репозитории, чтобы не дублировать эту бизнес-логику.

0 голосов
/ 11 апреля 2011

Шаблон репозитория помогает группировать бизнес-операции между связанными объектами.Это означает, что если у вас есть два объекта домена foo и bar и у вас есть общие транзакции, такие как GetList (), Update (), то можно создать общий репозиторий, например FoobarReporsitory.Вы можете даже абстрагировать это интерфейсом IFoobarReporsitory, чтобы сделать приложение слабо связанным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...