#java #json #jpa
#Ява #json #jpa
Вопрос:
Допустим, у меня есть Сущность, у которой есть свойство перечисления.
enum Property { A, B, C; }
И я хотел бы иметь аналогичный DTO для этой сущности, должен ли DTO иметь свойство в виде перечисления или строки?
Каков наиболее предпочтительный способ передачи перечисления в классе DTO для преобразования в перечисление и наоборот.
Комментарии:
1. Я предлагаю оставить этот вопрос открытым. Признаю, что здесь можно было бы (по крайней мере теоретически) иметь разные мнения, но я не вижу никаких пламенных войн или бесплодных дискуссий. С другой стороны, я уже вижу один хороший ответ, могут появиться другие, и из него может даже выйти некоторый консенсус и/или полезная информация.
Ответ №1:
На этот счет существует много разных мнений. Некоторые люди очень строги в разделении классов DTO и сущностей. Другие люди говорят, что вы должны сосредоточиться на классах доменов и использовать адаптеры инфраструктуры вместо DTO и сущностей.
По моему мнению, простые неизменяемые классы значений могут быть разделены между DTO и Сущностями. Например, мгновенная или локальная дата, перечисление или какой-либо предметный объект значений. Вам нужно только убедиться, что они могут быть правильно преобразованы из или в формат, необходимый для передачи данных, и они неизменяемы, т. е. только конструктор и получатели, без установщиков.
Поэтому я бы использовал перечисление как в DTO, так и в Сущности.
Ответ №2:
должен ли DTO иметь свойство в качестве перечисления
Конечно, так и должно быть. Правильный ввод-это первая строка проверки данных. Если значение свойства приведено к определенному предопределенному набору, почему оно не должно быть отражено в DTO?
Обратите внимание, что это не обязательно означает, что перечисление должно быть разделено между DTO и всем, на что в конечном итоге отображается DTO. Это совершенно другой вопрос, и у разных людей могут быть разные представления об этом.