Мапа відповідності (шаблон проєктування)

Мапа відповідності (англ. Identity Map) — шаблон проєктування, який покликаний покращити продуктивність взаємодії зі сховище даних зберігаючи записи у кеші.

При роботі зі сховищем можна завантажити один і той самий запис у різні об'єкти. Тоді при збережені це викликає неочікувану поведінку.

Даний шаблон гарантує, що в межах транзакції кожний об'єкт буде завантажений зі сховища тільки один раз. Після цього об'єкт зберігається у спеціальній колекції. При усіх наступних запитах до сховища, відбувається перевірка на наявність об'єкту в мапі відповідності.

Реалізація

[ред. | ред. код]

Нехай дана сутність:

class Product
{
        public int Id { get; set; }
        public string Name { get; set; }
}

Та сховище для роботи з ним:

class ProductDb
{
        public Product GetById(int id)
        {
                return db.Produc.Find(id);
        }
}

Тоді мапа відповідності буде мати вигляд кеш-проксі:

class ProductIdentityMap
{
        private readonly ProductDb _productDb = new ProductDb();
        private readonly Dictionary<long, Product> _entities = new Dictionary<long, Product>();

        public Product GetById(int id)
        {
            if (!_entities.ContainsKey(id)) 
            {
                   var product = _productDb.GetById(id);
                   _entities.Add(id, product);
            }        
            return _entities[id];
        }
}

Див. також

[ред. | ред. код]

Джерела

[ред. | ред. код]