В моей службе Spring Boot представление данных, используемое в моей базе данных (уровень постоянства), отличается от представления, используемого в моей логике приложения c.
В настоящее время у меня есть уровень служб между хранилищем layer и уровень бизнес-логики c, который обрабатывает сопоставление между уровнем персистентности и представлениями уровня домена.
Предоставляет ли Spring способ автоматической обработки этого на уровне хранилища? Преобразование - это просто два метода stati c, которые берут объект и возвращают его в другом представлении.
Вот краткий пример моих слоев и моего текущего решения. Я не могу опубликовать фактический код, но это демонстрирует проблему. Я не могу изменить свои представления данных или код отображения:
@Service
public class UserService{
@Autowired UserMapper mapper;
@Autowired UserRepository repository;
public UserEntity someServiceMethod(UserEntity entity){
entity.setName("Billy");
final Function<UserEntity, UserEntity> mapped =
mapper.mapped((dbUser -> repository.save(dbUser)));
return mapped.apply(entity);
}
}
@Service
public class UserMapper{
private final Function<DbUser, UserEntity> toApplication = /*...*/;
private final Function<UserEntity, DbUser> toPersistence = /*...*/;
public Function<UserEntity, UserEntity> mapped(Function<DbUser, DbUser> func){
return toPersistence.andThen(func).andThen(toApplication);
}
// + many more to deal with lists, no-argument repository methods etc.
}
@Repository public interface UserRepository extends CrudRepository<DBUser, Long>{}
В идеале я хотел бы просто иметь возможность сделать что-то вроде
@Repository public interface UserRepository extends CrudMappingRepository<DBUser, UserEntity, Long>{
@Override protected final Function<DbUser, UserEntity> toApplication = /*...*/;
@Override protected final Function<UserEntity, DbUser> toPersistence = /*...*/;
}