Как работает NORM
243
Рис. 13.3
Диаграмма «сущность–связь»
для рассматриваемого примера
В главе 10, обсуждая взаимодействие между приложением и базой данных,
мы набросали объект (который теперь можем назвать транспортным объ-
ектом) со всей информацией, связанной с бронированием. С точки зрения
авиапассажиров, бронирование представляет собой маршрут их путешест-
вия. В попытке сохранить читаемость фрагментов кода мы устранили один
уровень вложенности и решили представить только сегмент бронирования,
то есть один из рейсов маршрута. Таким образом, для целей данного при-
мера наш транспортный объект является объектом сегмента бронирования.
Диаграмма на рис. 13.3 показывает все таблицы и связи, необходимые для
построения отображения объекта базы данных в транспортный объект. Со-
ответствующий транспортный объект изображен на рис. 13.4.
Обратите внимание, что этот объект представляет контракт, то есть струк-
туру объекта, которую приложение ожидает получить. Он значительно от-
личается от того, как данные хранятся в базе. Важно, что реализация базы
данных никоим образом не влияет на то, как приложение взаимодействует
с базой данных, пока ее ответ соответствует контракту.
Пример
объекта JSON, следующего этому контракту, показан на рис. 13.5.
Взаимодействие между приложением и базой данных можно свести к сле-
дующему:
1) приложение сериализует данные в формат JSON, затем преобразует его
в массив текстовых строк и вызывает соответствующую функцию базы
данных;
244
Как избежать подводных камней объектно-реляционного
отображения
2) функция базы данных разбирает JSON, который был передан ей в ка-
честве параметра, и выполняет все, что должна делать функция: вы-
бирает или преобразует данные;
3) результирующее множество преобразуется в JSON (или, точнее, в мас-
сив строк, представляющий массив объектов JSON) и передается в при-
ложение, где он десериализуется и используется приложением.
Рис. 13.4
Транспортный объект (контракт)
На стороне приложения классы Java, представленные в лис тингах 13.1, 13.2
и 13.3, отображаются в тот же транспортный объект.
Листинг 13.1
Класс FlightEntity
package com.xxx.adapter.repository.entity.tls;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.ZonedDateTime;
public class FlightEntity {
@JsonProperty("flight_id")
private
int flightId;
Как работает NORM
245
@JsonProperty("flight_no")
private
String flightNumber;
@JsonProperty("departure_airport_code")
private String departureAirportCode;
@JsonProperty("departure_airport_name")
private
String departureAirportName;
@JsonProperty("arrival_airport_code")
private String arrivalAirportCode;
@JsonProperty("arrival_airport_name")
private
String arrivalAirportName;
@JsonProperty("scheduled_departure")
private ZonedDateTime scheduledDeparture;
@JsonProperty("scheduled_arrival")
private ZonedDateTime scheduledArrival;
Do'stlaringiz bilan baham: