2015-12-05 3 views
1

Я прочитал этот учебник по восстановлению весны-данных https://spring.io/guides/gs/accessing-data-rest/, и я не вижу, как это можно применить в реальной ситуации, когда у нас нет только одного объекта, но график объектов.Весенний REST и граф объекта реального мира

Предположим, что у нас есть объект Order, который имеет отношение «один ко многим» к элементу, который классифицируется объектом Category. Скажем, ради этого, что Категория реализована в древовидной структуре (поэтому у нее есть родитель и некоторые дети, т.е. у электронной категории могут быть 2 ребенка, компьютер и телевизор, у первых есть еще двое детей, материнская плата и клавиатуры). И скажем, что все эти отношения являются двумя способами (т. Е. Ордер может видеть его предметы, а Элемент может получить доступ к его заказу)

Итак, когда я запрашиваю объект «Заказ», я бросил службу REST, я не получил заказ , все его элементы и каждый элемент будет иметь весь график категории, который будет связан с каждым элементом и, следовательно, всеми заказами. Поэтому я в основном возвращаю всю базу данных.

Я понимаю, что двунаправленные отношения не идеальны, но даже если мы подавляем многие стороны отношений, при запросе заказа мы все равно получим Категория товаров-категорий родительских категорий родительских категорий - и т. д.

Итак, как вы останавливаете график сериализации объектов?

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

Есть ли у кого-нибудь проницательность для меня?

ответ

0

Здесь DTO - хорошая вещь. :)

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

Другим (хорошим) побочным эффектом является то, что вы отделяете упорство и полностью просматриваете. I. оба могут развиваться самостоятельно.

Одним (отрицательным) побочным эффектом может быть повышенное обслуживание. У вас есть, по крайней мере, два класса для поддержания, а также сопоставление между ними. Рамки вроде Dozer могут помочь вам с отображением как минимум.


Другим решением может быть, чтобы реализовать некоторые аддоны для Jackson, которые обрабатывают все эти случаи без необходимости DTOS. Я сам создал фильтр Antpath динамически решить, какой путь отфильтровывать в Джексон: https://github.com/Antibrumm/jackson-antpathfilter

Но вам нужно еще несколько вещей, чтобы рассмотреть, если вы хотите работать с сущностями домена напрямую.

  • цикл выключателя (чтобы избежать двунаправленных отношений, например)
  • отложенной загрузки/открыть сессию в виде рисунке как сериализация может пойти везде
  • Hibernate проксите, которые имеют метод, которые не являются сериализациями (сеанс)
+0

DTO! это именно то, чего я надеюсь избежать. Я полностью согласен со всем, что вы говорили о них: полный контроль, развязка и, к сожалению, БОЛЬШОЕ увеличение обслуживания – willix

Смежные вопросы