Должен ли DTO содержать перечисление или нет

#java #json #jpa

#Ява #json #jpa

Вопрос:

Допустим, у меня есть Сущность, у которой есть свойство перечисления.

 enum Property {  A, B, C; }  

И я хотел бы иметь аналогичный DTO для этой сущности, должен ли DTO иметь свойство в виде перечисления или строки?

Каков наиболее предпочтительный способ передачи перечисления в классе DTO для преобразования в перечисление и наоборот.

Комментарии:

1. Я предлагаю оставить этот вопрос открытым. Признаю, что здесь можно было бы (по крайней мере теоретически) иметь разные мнения, но я не вижу никаких пламенных войн или бесплодных дискуссий. С другой стороны, я уже вижу один хороший ответ, могут появиться другие, и из него может даже выйти некоторый консенсус и/или полезная информация.

Ответ №1:

На этот счет существует много разных мнений. Некоторые люди очень строги в разделении классов DTO и сущностей. Другие люди говорят, что вы должны сосредоточиться на классах доменов и использовать адаптеры инфраструктуры вместо DTO и сущностей.

По моему мнению, простые неизменяемые классы значений могут быть разделены между DTO и Сущностями. Например, мгновенная или локальная дата, перечисление или какой-либо предметный объект значений. Вам нужно только убедиться, что они могут быть правильно преобразованы из или в формат, необходимый для передачи данных, и они неизменяемы, т. е. только конструктор и получатели, без установщиков.

Поэтому я бы использовал перечисление как в DTO, так и в Сущности.

Ответ №2:

должен ли DTO иметь свойство в качестве перечисления

Конечно, так и должно быть. Правильный ввод-это первая строка проверки данных. Если значение свойства приведено к определенному предопределенному набору, почему оно не должно быть отражено в DTO?

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