У меня есть проблема, которая беспокоит меня в течение некоторого времени, и я также придумал решение, здесь речь идет скорее о том, как наилучшим образом реализовать ее, поэтому я ищу совет у вас, если вы когда-либо имели дело с этой ситуацией прежде (трудно найти что-нибудь полезное в этой теме в Интернете).
3-уровневая архитектура (богатый клиент, такой как Swing или Eclipse RCP или Android, веб-приложение с реализацией уровня сервиса, реляционная база данных). Мои модели - POJO (простые старые объекты Java, чистые контейнеры данных с геттерами и сеттерами), которые сохраняются (технический идентификатор на всех моих моделях).
Я часто имею дело с крупными моделями, которые используются в совокупности, но их нужно эффективно читать и перевозить. Скажем, у меня есть следующие модели:
Теперь, когда я перечисляю или загружаю статью, я не хочу загружать весь автор (Пользователь), поскольку он предоставляет слишком много деталей (хэш-пароль и соль) и переносит слишком много данных (учетных данных, изображений) для того, что я на самом деле необходимо в контексте статьи (имя и фамилия и адрес электронной почты).
Вообще говоря: иногда мне нужны подробные сведения о моих моделях (при их создании или редактировании или в особых ситуациях), но когда я использую их совместно в других моделях, я бы предпочел упростить форму (если мне нужны детали, Я мог бы загрузить их с помощью отдельного запроса).
Для каждой модели я мог бы создать два варианта: полный подробный вариант с полным CRUD (создание, чтение, обновление, удаление) и упрощенный вариант только для чтения, который может использоваться в качестве суррогата в агрегирующих отношениях. Упрощенная версия модели также содержит технический идентификатор детальной версии, поэтому я могу получить это по требованию.
Я не могу сопоставить ваш вариант решения с шаблоном, о котором я знаю. Но ваши требования могут быть выполнены путем внедрения очень тонкого API (Web API) поверх вашего сервиса позже.
Есть две части,
Чтение: как вы уже упоминали, вам может потребоваться выполнить определенный выбор элементов данных для потребителя на основе использования/разрешений. Это может быть выполнено путем указания набора фасетов в вашем входящем запросе GET.
Проверьте здесь пример, https://developer.linkedin.com/documents/people-search-api
Написание: для фрагментов используйте операции PATCH. Это даст вам гибкость для обновления по областям.
Проверьте здесь пример: https://www.mnot.net/blog/2012/09/05/patch
В целом, это дает вам очень гибкий API с очень чистой моделью домена под вашим API. И это широко распространенный подход в наши дни.
Надеюсь, это поможет.