Пытаюсь работать с пружинным 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 из репозитория. Должен ли я добавить еще один уровень абстракции, который будет выполнять это преобразование, или, возможно, доступно другое (весеннее) решение?

0
Brainsucker92 15 Апр 2020 в 06:50

1 ответ

Лучший ответ

В стандартной многоуровневой архитектуре уровень доступа к данным (он же уровень сохраняемости ) отвечает за хранение / извлечение из базы данных.

Если вам нужны данные в другой форме, это будет ответственность бизнес-уровня (он же уровень бизнес-логики , он же уровень домена ), здесь должны быть бизнес-правила о том, как построить Car из CarParts.

Нет, это не другой уровень, это часть уровня бизнес-логики .

0
Andreas 15 Апр 2020 в 04:20