Можно ли использовать Interace для преобразования между DTO и Entity?

public interface UserDto {
    public long getId();
    public String getName();
    public String getEmail();
    public String getPassword();
}

public interface UserEntity extends UserDto {
    public long getUuId();
}
0
Bharat Upadhya 27 Ноя 2022 в 08:01

1 ответ

В большинстве случаев я бы сказал нет, потому что свойства у них разные и должны быть независимыми друг от друга, поэтому пользовательская реализация с интерфейсом не является окончательным решением.

Вместо этого я бы рекомендовал использовать библиотеку mapstruct, которая также работает с интерфейсами под капотом. Вы определяете интерфейс, и он сгенерирует для вас шаблонный код, в результате чего код будет более удобным для сопровождения:

@Mapper 
public interface UserMapper{
    @Mappings(
             @Mapping(target = "id", source = "id"),
             @Mapping(target = "name", source = "name"),
             @Mapping(target = "email", source = "email"),
             @Mapping(target = "password", source = "password")
            })

    UserEntity mapDtoToEntity(UserDto usertDto);
}

Если ваши сопоставления достаточно просты, используйте ModelMapper или Spring BeanUtils.copyProperties. Если вы действительно хотите отобразить их самостоятельно, я бы посоветовал не смешивать их с интерфейсом и держать их независимыми друг от друга.

0
gkatiforis 27 Ноя 2022 в 09:12