Witam, mam u siebie w aplikacji taką politykę:
Mam standardowo encje do tabelek i do większości encji mam zrobione repozytoria. Jak wiadomo czasem trzeba zrobić coś bardziej optymalnie, napisać jakieś zapytanie łączące itp.
Teraz zakładam, że mam moduł statystyk czegoś tam. Taki moduł jest korzysta z repozytorium StatisticRepository, wyświetla on dane statystyczne w kilku miejscach na portalu.
Zakładamy, że nie mogę zrobić np serwisu bo dane są inaczej prezentowane a mało tego w niektórych miejscach trzeba je dodatkowo przeliczyć/zmodyfikować.
I teraz dwa pytania:
1) Jak robicie cachowanie danych u was? Mam dwa podejścia:
a ) W każdym kontrolerze cachuje już wyjściowe dane tzn jeśli jest w cache to tylko pobieram i wypluwam wyniki na ekran. Jest to szybsze do tego co chcę zrobić lecz mniej wygodne.
b ) Dla mnie wygodniejsze było by zacachowanie danych bezpośrednio pobranych z BD i potem w kontrolerze wywolywac np metode $statsRepository->getSomeDataWithCache(...);
I tutaj aby rozwiązanie było elastyczne powinienem mieć CacheInterface który pozwala mi na użycie dowolnego mechanizmu cachowania np pliku txt/xml/json..., czy tam mojego redisa czy innego dowolnego rozwiązania.
Ale jako, że korzystam tylko i wyłącznie z redisa lepiej to przekazywałbym jako 1-szy parametr obiekt PRedis.
Dane są potrzebne w wielu miejscach i wyciągnięcie danych zajmuje 0.5 sekundy a przeliczenie jest kilka set razy szybsze.
Czy takie rozwiązanie jak w podpunkcie b jest dobre? Czy można wyłuskać obiekt redisa?
2) Gdzie umieszczacie klasy modeli np mam model statystyk który wykonuje obliczenia statystyczne, dodatkowo mam model TreeMaxtix który wykonuje obliczenia i operacje na macierzach reprezentujących drzewa itp...
Czy jeśli umieszczę to w Entity/Model to jest to jakoś rażące? Mam kilka 5/6 modeli.