Создан  demius PM 4 года назад; Обновил  demius PM 3 года назад

Нам часто нужно будет от проекта получать разную инфу. От многих разных проектов. Разную инфу.

  • С одной стороны не очень красиво иметь гигантский богический ProjectService, отающий что угодно и кеширующий сервисы.
  • С другой стороны не очень оптимально запрашивать из базы один и тот же проект 10 раз. (для получение полномочий по нему, для получение значения справочника, для еще чего-то)

Делаем иерархию, в которой много внешних конкретных сервисов, которые в первой итерации будут брать проект из репозитория.

  • ProjectSecurity у нас получает публичность проекта (и, в будущем, будет получать набор ProjectUsers, наверное)
  • DictionariesService получает справочники и отдает инфу по id Затем делаем под ними ProjectRegistry, который по первому обращению забирает из базы проект целиком и кеширует его. И сразу листенер, который удаляет кеш указанного проекта…

Нам часто нужно будет от проекта получать разную инфу. От многих разных проектов. Разную инфу.

  • С одной стороны не очень красиво иметь гигантский богический ProjectService, отающий что угодно и кеширующий сервисы.
  • С другой стороны не очень оптимально запрашивать из базы один и тот же проект 10 раз. (для получение полномочий по нему, для получение значения справочника, для еще чего-то)

Делаем иерархию, в которой много внешних конкретных сервисов, которые в первой итерации будут брать проект из репозитория.

  • ProjectSecurity у нас получает публичность проекта (и, в будущем, будет получать набор ProjectUsers, наверное)
  • DictionariesService получает справочники и отдает инфу по id Затем делаем под ними ProjectRegistry, который по первому обращению забирает из базы проект целиком и кеширует его. И сразу листенер, который удаляет кеш указанного проекта
Комментарии могут оставлять только авторизованные пользователи
 demius 3 года назад

Не забываем, что справочники лежат в TaskSettings, надо сначала разобраться с ним, и либо по DoctrineType гидрировать его в сущность проекта, либо делать под него (и другие настройки) отдельный регистри ProjectSettingsRegistry

 demius 4 года назад

От богического ProjectService мы уже ушли. Каждый сервис по необходимости пытается получить ProjectContext, если проект не из него, грузит из репозитория.

Исключение - система полномочий, которая имеет Security/ProjectRegistry - который грузит отдельным методом не в EM, а напрямую нужную инфу по проекту ,и кеширует внутри себя на время запроса.

Так как проекты кешируются в EM возможно делать для них из разных сервисов getBySuffix и не страшно, он выйдет из кеша доктрины и отдельного кеширования и не требуется. Это стоит изучить и не плодить лишних сущностей (в т.ч. ProjectRegistry для полномочий убрать), либо уже для всех сделать такой Registry.

 demius 4 года назад

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