Кэширование участка кода в доменном управляемом дизайне

В приложении, которое следовало за Доменным Управляемым Дизайном, где у Вас есть следующие виды понятий

  1. Репозиторий, который имеет дело с Доступом к базе данных
  2. Прикладная служба, которая координирует взаимодействия между enties и объектами значения и т.д.

куда в целом Вы поместили бы кэширующийся код для устранения дорогого вызова к базе данных?

Я видел кодовые базы, что просто кэш повсеместно и это трудно к использованию памяти монитора и трудно предоставить инструкции другим разработчикам.

Поймите, что я знаю, что Вы должны только данные кэша, когда Вы должны, я просто задаю общий вопрос.

6
задан DownChapel 8 January 2010 в 15:53
поделиться

2 ответа

Прекрасная вещь об абстрактных репозиториях заключается в том, что вы можете использовать рисунок Decorator для реализации таких сквозных проблем, как кэширование.

В качестве примера, учитывая интерфейс имирепозированного интерфейса, вы можете создать такое MyCachingRepository, как этот псевдо код:

public class MyCachingRepository : IMyRepository
{
    private readonly IMyRepository repository;

    public MyCachingRepository(IMyRepository repository)
    {
        if(repository == null)
        {
            throw new ArgumentNullException("repository");
        }

        this.repository = repository;
    }

    public Foo SelectFoo(int id)
    {    
        Foo foo = ... // attempt to get foo from cache

        if // foo is not it cache
        {
            foo = this.repository.SelectFoo(id);
            // save foo in cache
        }
        return foo;
    }
}

в этом примере, Getfoo определяется имирепозионом. Обратите внимание, как оформленный репозиторий вызывается только в том случае, если товар не найден в кеше.

Это следует по принципу принципе односпаливания [11148770] , поскольку реальная реализация кэширования может сосредоточиться на получении и сохранения данных, тогда как декоратор кэширования может сосредоточиться на кэшировании. Это позволяет вам варьироваться два независимо друг от друга.

В нашем нынешнем проекте мы использовали этот подход, и что очень приятно, что мы могли бы сделать это как запоздалая мысль, даже не касаясь оригинальных репозиторий. Это в духе открытого / закрытого принципа .

10
ответ дан 9 December 2019 в 20:44
поделиться

Я бы поместил его в репозитории. Репозитории должны быть определены договором, а использование кэша должно быть скрыто за этим договором, чтобы он был прозрачен для потребителя репозитория.

2
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: