Как можно сохранить агрегат (родитель и дети) в хранилище? - PullRequest
1 голос
/ 18 июля 2009

Согласно ответу Дилана на вопросы «Используя шаблон репозитория, лучше ли сохранять родительские и дочерние объекты вместе или по отдельности?» , репозиторий сохраняет весь агрегат (родительский и дочерний).

Как можно поступить так, будет ли это закодировано в фактически хранимой процедуре (при их использовании); Вы бы также назвали детские хранилища ...

например, с родительским классом Country со списком детей города:

class Country
{
    List<City> cities;
    ...
}

и фрагмент репозитория:

public Save(Country country)
{
    ...

    ICityRepository cityRepository = new CityRepository();

    foreach (City city in country.Cities)
    {
        cityRepository.Save(city);
    }

    ...
}

или есть лучшая альтернатива?

Кроме того, вызывает ли дочерний репозиторий, как в примере выше, тяжелые последствия для производительности, если есть много детей?

Ответы [ 2 ]

1 голос
/ 19 июля 2009

Если Страна - это совокупный корень, который в вашем случае выглядит так, то у вас не должно быть отдельного хранилища для городов. Хранилища необходимы только для совокупных корней.

Так что забудьте о ICityRepository / CityRepository и просто сохраните сами города в репозитории вашей страны.

0 голосов
/ 19 июля 2009

Вы можете передать объекты города в хранимую процедуру страны в формате xml.

Затем достаточно одного запроса на обновление / вставку / удаление, чтобы исправить их все.

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