В .NET почему ObjectCache является предпочтительным типом по сравнению с MemoryCache? - PullRequest
1 голос
/ 22 марта 2019

Итак много примеров использования кэша памяти в .NET (, включая официальные документы ), создайте его с помощью:

private readonly ObjectCache memoryCache = MemoryCache.Default;

Есть ли основания предпочесть это:

private readonly MemoryCache memoryCache = MemoryCache.Default;

Ответы [ 3 ]

5 голосов
/ 22 марта 2019

Это похоже на объявление переменной или получение параметра типа Stream вместо FileStream или MemoryStream: гибкость в том, что вам не нужно заботиться о том, какая у вас реализация.

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

3 голосов
/ 22 марта 2019

Причиной предпочтения ObjectCache над MemoryCache является L в SOLID ...

Принцип подстановки Лискова:

Объекты в программе должны заменяться экземплярамиих подтипов без изменения правильности этой программы.

ObjectCache заменяется любым из его подтипов, включая MemoryCache, в то время как MemoryCache не может быть заменено чем-либо, что вынуждает вас к конкретной реализации.

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

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

Так что MemoryCache наследуется от ObjectCache. Для повседневного использования вы бы использовали MemoryCashe. Но если вы хотите самостоятельно, вы можете наследовать от objectCashe и писать свои собственные методы.

public class MemoryCache : ObjectCache, 
IEnumerable, IDisposable
...