Ищу совет: обзор / подробное представление моделей

1

У меня есть проблема, которая беспокоит меня в течение некоторого времени, и я также придумал решение, здесь речь идет скорее о том, как наилучшим образом реализовать ее, поэтому я ищу совет у вас, если вы когда-либо имели дело с этой ситуацией прежде (трудно найти что-нибудь полезное в этой теме в Интернете).

ситуация

3-уровневая архитектура (богатый клиент, такой как Swing или Eclipse RCP или Android, веб-приложение с реализацией уровня сервиса, реляционная база данных). Мои модели - POJO (простые старые объекты Java, чистые контейнеры данных с геттерами и сеттерами), которые сохраняются (технический идентификатор на всех моих моделях).

Я часто имею дело с крупными моделями, которые используются в совокупности, но их нужно эффективно читать и перевозить. Скажем, у меня есть следующие модели:

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

проблема

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

Вообще говоря: иногда мне нужны подробные сведения о моих моделях (при их создании или редактировании или в особых ситуациях), но когда я использую их совместно в других моделях, я бы предпочел упростить форму (если мне нужны детали, Я мог бы загрузить их с помощью отдельного запроса).

Решение

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

  • Для пользователя: упрощенная модель имеет только имя/фамилию и адрес электронной почты.
  • Для изображения: упрощенная модель поставляется без данных изображения.
  • Автором статьи является упрощенная версия пользователя, а изображение профиля пользователя - упрощенная версия изображения.

Вопрос

  • Является ли это существующим образцом? Это несколько относится к DTO (объект передачи данных), но это не то же самое. Кто-нибудь видел это раньше?
  • Вы использовали что-то подобное раньше? Любые советы или советы по наименованию, OO-отношения между двумя представлениями?
Теги:
architecture
modeling
3-tier

1 ответ

1

Я не могу сопоставить ваш вариант решения с шаблоном, о котором я знаю. Но ваши требования могут быть выполнены путем внедрения очень тонкого API (Web API) поверх вашего сервиса позже.

Есть две части,

  • Чтение: как вы уже упоминали, вам может потребоваться выполнить определенный выбор элементов данных для потребителя на основе использования/разрешений. Это может быть выполнено путем указания набора фасетов в вашем входящем запросе GET.

    Проверьте здесь пример, https://developer.linkedin.com/documents/people-search-api

  • Написание: для фрагментов используйте операции PATCH. Это даст вам гибкость для обновления по областям.

    Проверьте здесь пример: https://www.mnot.net/blog/2012/09/05/patch

В целом, это дает вам очень гибкий API с очень чистой моделью домена под вашим API. И это широко распространенный подход в наши дни.

Надеюсь, это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню