Моделирование и выбор стратегии гибернации: что делать с небольшими кусочками информации

Окружающая среда:

  • Джава
  • весна
  • Модель MVC
  • зимовать

Описание:

Хорошо, допустим, у меня есть веб-приложение с двумя объектами домена:

  • пользователь
  • отчет

Пользователь может иметь много отчетов (отношение один ко многим). Обратите внимание, что отчет - это очень сложный объект с множеством атрибутов.

Класс пользователя:

public class User { 
    private Set<Report> reports = new HashSet<Report>();
}

Класс отчета:

public class Report {   
    //...so maaaaaaany attributes
    private String name;
}

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

  1. Я не думаю, что нужно загружать отчеты из-за проблем с памятью, поэтому я буду ленивым.
  2. Даже если мне лень, дело в том, что мне действительно нужно только имя отчетов. Я не хочу загружать тонны информации, просто чтобы выбрать название отчета!

Таким образом, возможное решение состоит в том, чтобы изменить класс User следующим образом:

public class User { 
    private Set<Report> reports = new HashSet<Report>();
    private List<String> reportNames;
}

получение необходимой информации из отчета пользователю. На мой взгляд, это приводит к двум последствиям:

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

Так есть ли хорошее решение, чтобы справиться с этой проблемой? Я думаю, что это общая проблема для разработчиков.

1 ответ

Решение

Одним из способов было бы использовать следующий шаблон:

  • Создайте объект представления, который представляет именно то, что вы хотите отобразить, давайте назовем его UserViewObject, Я бы не стал модифицировать доменные объекты просто для того, чтобы адаптировать их для представления, что нарушило бы дизайн MVC.

  • Реализует метод обслуживания в классе обслуживания, который возвращает список UserViewObject,

  • Пусть сервисный метод вызывает метод DAO в классе DAO, который фактически выполняет эту работу.

Метод DAO может обеспечить только чтение необходимых данных, или вы можете выполнить это преобразование на уровне сервиса. Это действительно немного из того, что вы предпочитаете, и как оно вписывается. Но не информируйте слой DAO о ваших UserViewObject,

Другие вопросы по тегам