0 2.6K ru

Identity Map – Паттерны Объектно-Реляционной логики (PoEAA)

Назначение:

Обеспечивает однократную загрузку объекта, сохраняя данные об объекте в карте соответствия. При обращении к объектам, ищет их в карте соответсвия.

Может получиться, что разработчик загрузит данные из БД в два разных объекта. Потом, когда он сохранит их, получится путаница и коллизия различных данных.

Более того, с этим связаны проблемы производительности. Когда дважды загружается одна и та же информация, увеличиваются затраты на передачу данных. Таким образом, отказ от загрузки одних и тех же данных дважды не только обеспечивает корректность информации, но и ускоряет работу приложения.

Паттерн Identity Map хранит записи о всех объектах, которые были считаны из БД за время выполнения одного действия. Когда происходит обращение к объекту, проверяется карта соответствия (присутствия), чтобы узнать, загружен ли объект.

Пример реализации паттерна на C#:

  class Book
    {
        public long Id { get; set; }
        public string Name { get; set; }
    }

    class IdentityMap
    {
        private static readonly IdentityMap Instance = new IdentityMap();
        private readonly Dictionary<long, Book> _books = new Dictionary<long, Book>();

        private IdentityMap() { }

        public static void AddBook(Book book)
        {
            Instance._books.Add(book.Id, book);
        }

        public static Book GetBook(long id)
        {
            return Instance._books[id];
        }
    }

 

Comments:

Please log in to be able add comments.