Мапа відповідності (англ. 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];
}
}