Автор оригинала: David Wong.
1. Единица работы
Он используется для ведения списка объектов, на которые влияют бизнес-транзакции, и координации записи изменений и решения проблем параллелизма. Следующим образом:
1) Рабочий механизм:
Ключ:
Именно подчинение решает, что делать. Он открывает транзакцию, выполняет все одновременные проверки (с использованием пессимистичных или оптимистичных автономных блокировок) и записывает изменения в базу данных. (Разработчику вообще не нужно отображать метод обновления базы данных вызовов)
Способ записи обновлений объектов:
Регистрация вызывающего абонента: Если пользователь изменяет объект, он должен зарегистрировать его в единице работы. Ни один незарегистрированный объект не будет записан в базу данных при отправке.
Метод регистрации объекта: Метод регистрации помещается в объект. Загрузка объекта из базы данных зарегистрирует загруженный объект как “чистый”, а метод настройки зарегистрирует объект, который будет установлен как “грязный”.
Контроллер рабочего блока: Рабочий блок управляет операциями чтения всех баз данных. Как только объект будет прочитан, он будет зарегистрирован как “чистый” объект. Единица работы создает копию при чтении, сравнивает текущий объект с объектом копирования при отправке (этот метод относится к измененному объекту), чтобы увидеть, изменился ли объект.
Назначение: База данных (гарантированная последовательность обновления, пакетное обновление при использовании ссылочной целостности), ресурсы транзакций (настройка очереди сообщений, мониторинг транзакций)
Единица реализации работы в сетевой среде: используя наборы данных без подключения, каждая строка имеет версию (текущая версия, исходная версия, рекомендуемая версия), состояние (без изменений, добавлено, удалено, изменено) понятия
2) Используйте время:
Основная цель: Запишите различные объекты, которыми манипулировали, чтобы знать, какие объекты необходимо учитывать для синхронизации данных в памяти с базой данных.
2. Сопоставление идентификационных данных
Сохраняя каждый загруженный объект в сопоставлении, убедитесь, что каждый объект загружается только один раз. При доступе к объектам находите их с помощью сопоставления.
1) Рабочий механизм:
Выбор ключа:
Первичные ключи таблицы данных (или другие простые типы данных)
Является ли отображение общим (например, findPerson (1) или find (“Человек”, 1)?) Используйте универсальный, когда все типы ключей объектов одинаковы, и используйте отображение в других случаях
Номер (одно сопоставление, множественное сопоставление): (неясно)
Расположение сопоставления идентификаторов: Когда есть единица работы, она помещается в единицу работы; когда единицы работы нет, она привязана к реестру сеанса.
2) Используйте время:
Вообще говоря, сопоставление идентификаторов используется для управления всеми считываемыми данными измененной базы данных.
Укажите кэш как операцию чтения базы данных.
3. Задержка загрузки
Объект, который не содержит всех необходимых ему данных, но знает, как их получить
1) Рабочий механизм:
Четыре реализации:
Отложенная инициализация:
Идея реализации: Каждый раз, когда вы посещаете поле свойства, вы должны проверять, является ли оно пустым. Если оно пустое, вычислите значение поля, прежде чем возвращать его (обратите внимание, что поле должно быть самоинкапсулировано, даже внутри класса, доступ к нему возможен только через него)
Преимущества и недостатки: Простой, но часто налагающий зависимости между объектами и базами данных
Применимые сценарии: Записи о действиях, запись в базе данных таблиц, запись данных строк
Виртуальный агент:
Определение: Виртуальный агент-это объект, который выглядит так, как будто он должен быть объектом в домене, но на самом деле он ничего не содержит. Только когда вызывается один из его методов, он загружает соответствующие объекты из базы данных
Преимущества и недостатки: Кажется, что это именно тот объект, который вам нужен, но на самом деле это не тот объект. Легко впасть в проблему идентификации. Для одного и того же реального объекта могут существовать виртуальные агенты с разными характеристиками объекта (для которых необходимо переопределить метод Equals вместо метода идентификации).
Применимый Сценарий: Картограф данных
Держатель ценности:
Идея реализации: Чтобы получить объект, вы можете получить доступ к держателю значения, чтобы получить его значение, но только при первом обращении к держателю значения он действительно считывает данные из базы данных.
Преимущества и недостатки: Избегайте проблем с идентификацией; классы должны знать о существовании владельцев ценностей и терять явный тип данных;
Двойная тень:
Идея реализации: Когда объект загружается из базы данных, он содержит только свой идентификатор. Каждый раз, когда осуществляется доступ к домену, он загружает свое полное состояние (данные домена могут быть разделены на разные группы и загружены по требованию).
Проблема задержки загрузки:
Наследование (виртуальный агент, дубликат, необходимо знать, какой тип дубликата или дублирующего объекта нужно создать);
Изменяющаяся загрузка (создание доступа к базе данных сверх необходимого) влияет на производительность приложения (решение: элементы в наборе отложенной загрузки неприменимы, но весь набор может быть отложенной загрузкой)
Сценарий: Аспектно-Ориентированные программы (Размещение Отложенной загрузки в Одном Аспекте и Независимое Изменение Стратегий Отложенной загрузки)
2) Используйте время:
Оптимальное время: требуются дополнительные вызовы, и когда данные, вызываемые при использовании основного объекта, недоступны (в зависимости от того, сколько данных считывается из базы данных и сколько раз выполняются вызовы базы данных при загрузке объекта)
Оригинал: “https://developpaper.com/day-11-enterprise-application-architecture-patterns-object-relational-behavior-patterns/”