Лучшая практика архитектуры Hibernate - PullRequest
0 голосов
/ 30 октября 2011

Мне недавно пришлось устранять проблему с производительностью при медленной загрузке сетки. После расследования выяснилось, что кто-то использовал List<Product> для заполнения сетки. Проблема заключалась в том, что у объекта Product было много свойств, многие из которых не.lazyloads (), большинство из которых даже не нужны для сетки.

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

Мой вопрос к SO-сообществу, как вы моделируете свои объекты? Я думал, что все объекты должны иметь версии «details» и «info», поскольку иногда требуется интенсивная загрузка объектов. То есть. ProductDetails будет содержать всю информацию и не будет использоваться в списках, тогда как ProductInfo будет содержать просто информацию высокого уровня для использования в списках, быстрых поисках и т. Д.

Существует ли стандарт, который был принят в качестве наилучшей практики для моделирования объектов?

1 Ответ

4 голосов
/ 30 октября 2011

Проблема здесь в том, что вы путаете объекты доменной модели с объектами DTO / Presentation Model.

Обычно я неохотно считаю любое руководство «лучшей практикой», но вот несколько общих советов:

  • Доменные объекты должны быть по одному на таблицу (без учета наследования)
  • Ленивая загрузка не должна быть отключена в отображениях. Хорошая статья об этом .
  • Используйте разумные batch-size настройки для сущностей и коллекций (практическое правило: используйте размер вашей страницы)
  • Использовать кэширование, по крайней мере, для объектов, предназначенных только для чтения.
  • Используйте проекции (анонимные, типизированные, массивы объектов, все, что работает), если вам действительно нужно загрузить всего несколько полей из множества объектов, когда вам не нужно редактировать объект
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...