В настоящее время делаю тестовое приложение с JCR (Modeshape).
Абстрагированный поток выглядит следующим образом: session.open, репозиторий извлекает данные из одного или нескольких узлов, связанных с запросом, session.close.
Результирующие узлы содержат свойства и т. д., которые мне нужно представить в представлении. В настоящее время у меня есть наивная установка, позволяющая представлению напрямую брать свойства из jcrNode. Однако это дает ошибку, например: «Сеанс с идентификатором« e2881d98-56fd-4a57-9cce-1a7d087a11e8 »был закрыт», что имеет смысл.
Я считаю, что общий подход (пожалуйста, исправьте, если это не так) будет заключаться в создании своего рода nodeDTO, который заполняется jcrNode, когда сеанс все еще активен. После этого представление может свободно использовать nodeDTO по своему усмотрению.
Теперь идеальная структура для такого nodeDTO будет имитировать структуру jcrNode 1-to-1, так почему бы не использовать jcrNode как сам DTO? Это можно было бы выполнить с помощью чего-то вроде спящего режима отсоединения/присоединения. Я понимаю, что jcrNode (с его дочерними элементами) может содержать много данных, поэтому, вероятно, должны быть некоторые параметры для определения глубины отсоединения и т. д.
Другой подход состоял бы в том, чтобы иметь что-то вроде шаблона openSessionInView, хотя это было бы специфично для mvc-framework.
Итак, я вижу несколько подходов к этому, сначала лучший подход (imo):
- функциональность отсоединения/присоединения для jcrNodes
- хорошая библиотека вспомогательных классов для создания DTO
- опенсессионинвиев
Любые комментарии к подходу «наилучшей практики» и т. д. приветствуются.