내 extbase 모델 중 하나에서 데이터베이스에 저장된 속성에서 파생 된 일부 속성을 초기화하고 싶습니다. 이러한 가상 속성의 계산에는 많은 시간이 소요되므로 캐시를 만들고 싶습니다. 따라서 내 프로그램의 흐름은 다음과 같이 어떻게 든 찾아야한다 : 평소와 같이extbase 도메인 모델의 초기화 후
- 로드 도메인 오브젝트를 데이터베이스에서
- 확인을 가상 속성은 캐시에 사용할 수있는 경우. 그렇다면 거기에서 그것을 가져오고, 그렇지 않으면 그것을 계산하고 캐시하십시오.
내가 처음에는 "initializeObject"메서드가 필요하다고 생각했지만 그렇지 않았습니다. 데이터베이스에서 속성을 초기화하기 전에 호출되었습니다. 그래서이 두 가지를 내놓았다 : 나는 개체를 가져 오는 한 후 저장소에서 수동으로 초기화 메소드를 호출 할 수 있습니다,하지만 이상한 것 같다 누군가가 일반 저장소에 다른 find*
방법을 추가하는 경우 휴식 것이
- .
- 또 다른 아이디어는 가상 속성 "virtualPropertiesInitialized"를 모델에 추가하고, 가상 속성 중 하나가 액세스 될 때마다 쿼리하고 필요한 경우 가상 속성을 초기화하는 것입니다. 또한 이상하게 보일지 모르지만 누군가가 "찾기"방법을 일반 저장소에 추가하면 문제가 해결되지 않습니다.
내 질문은 :
어떻게 내가하고 싶은 일을 할 수있는 기본/모범 사례가 있습니까?
: 두 번째 통화에
, 당신이 이전에 저장된 값을 반환합니다. 이 플래그는 캐시 상태를 쿼리 할 때마다 캐싱 프레임 워크가 SQL 쿼리를 생성하지 못하도록하기 때문에 페이지 렌더링 당 많은 SQL 쿼리가 발생합니다. 나는 더 나은 방법을 지적하지 않는 한 지금은 그걸 맡길 것입니다. – Jost''virtualPropertiesInitialized''와 같은 속성을 정의하는 대신, 값을 보유하는 멤버 변수를 추가 할 것입니다. 이 값이 널이면 캐시에서 가져오고 그렇지 않으면 홀더를 리턴하십시오. 나는 이것을 내 응답자에게 덧붙일 것이다. – Merec
그게 재산으로 플래그를 재사용하는 좋은 방법이지만, 내 경우에는 작동하지 않습니다 : 속성은 'null'수 있습니다. – Jost