Пытаюсь работать с пружинным CrudRepository. В моей текущей реализации этот репозиторий не хранит сам бизнес-объект, с которым я хочу работать в приложении. Но скорее сохраняются только определенные части, которые необходимы для восстановления моего бизнес-объекта. После завершения восстановления эти данные больше не нужны. По крайней мере, ни одним другим классом в рамках проекта. Вот почему я хочу избегать передачи ненужных данных по всему проекту.
Теперь предположим, что моя модель выглядит примерно так:
interface Car {
// This is my business object I want to work with
}
@Entity
class CarParts {
// This data is stored in the DB and required to re-construct the business object.
PartA a;
PartA b;
Long id;
}
interface CarFactory {
Car createCar(CarParts parts);
}
Как видите, CarParts хранятся на уровне постоянства, но это не тот объект, с которым я хочу работать. Сама машина - это то, что мне нужно. Это можно получить, используя фабричный класс. Теперь очевидно, что я не хочу вызывать фабрику вручную каждый раз, когда использую CrudRepository. Вместо этого я бы хотел, чтобы это происходило автоматически. Лучшим случаем было бы получить экземпляр класса Car из репозитория. Должен ли я добавить еще один уровень абстракции, который будет выполнять это преобразование, или, возможно, доступно другое (весеннее) решение?
1 ответ
В стандартной многоуровневой архитектуре уровень доступа к данным (он же уровень сохраняемости ) отвечает за хранение / извлечение из базы данных.
Если вам нужны данные в другой форме, это будет ответственность бизнес-уровня (он же уровень бизнес-логики , он же уровень домена ), здесь должны быть бизнес-правила о том, как построить Car
из CarParts
.
Нет, это не другой уровень, это часть уровня бизнес-логики .
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].