Uwaga, blog przeniesiony

Posty na tym blogu już nie będą się pojawiać. Zapraszam gorąco pod nowy adres: blog.grzegorzpawlik.com



środa, 25 lutego 2009

Pliki w formie binarnej w bazie

Wcześniej pisałem o tym problemie, gdy pliki trzymamy fizycznie na dysku a w bazie tylko informację np. nazwę pliku (Co się dzieje, gdy dane są nie tylko w bazie).

Jako, że nowe projekty także służą do eksperymentowania z nowymi rozwiązaniami, dlatego próbujemyz nowymi rozwiązaniami:
  1. Po pierwsze komponent: ma dostawać tablicę po uploadzie (chodzi o pola "file"), zwracać nazwę zapisanego pliku (dla standardowego podejścia) lub zawartość gotową do wrzucenia do BLOBa
  2. Po drugie Helper, który będzie się zajmował wyświetlaniem takich zdjęć (a w przyszłości także zajmie się cache'owaniem ze wspomnianą w powyższym artykule metodą z nagłówkami expire)

W takim rozwiązaniu niestety pojawia się problem (strzałki oznaczają przepływ danych, uwaga: diagram nie przedstawia dosłownie przebiegu jednego zapytania, ale dwóch zapisu (do kontrolera) i wyświetlenia obrazka (od kontrolera)) :


Chodzi o fragment zaznaczony na czerwono. To jest nadmiarowe zachowanie. Lepiej byłoby, gdyby komponent (poprzez kontroler) przekazał nazwę pliku, Helper sprawdził, czy plik istnieje, a w razie gdyby nie istniał - musiałby 'poprosić' komponent o aktualizację pliku. A to jest w konflikcie z tym co napisałem przy okazji Dobrych praktyk #2 - Helper nie może używać kontrolera, ani komponentu.

I tu się wydarzyła rzecz ciekawa, w tym poście chciałem napisac o problemie, na który nie widzę dobrego sposobu. Chciałem przedstawić ideę pierwszego podejścia.
Dla bardziej przejrzystego przekazania idei postanowiłem zbudowac diagram i uświadomiłem sobie jak bardzo wizualizacja pomaga w zrozumieniu problemu.
A od zrozumienia problemu do jego rozwiązania jest raczej niedaleko.

No i w tym momencie wpadłem na pomysł bez komponentu i bez Helpera, ale za to sam Behavior. Myślę sobie, że Behaviors są rozszerzeniem Modeli, które odpowiadają za warstwę przechowywania danych.
Pomysł jest taki, że -pomijając kwestię uploadu i sapisu - behavior w afterRead() sprawdził, czy plik fizycznie jest aktualny, jeśli jest - zwróci jego nazwę. Jeśli nie jest - utworzy go na podstawie danych w bazie (koniecznie z inną nazwą) i zwróci jego nazwę (relatywną do img/) ścieżką.

Sprawdzę to empirycznie i napiszę Wam jak poszło.

Brak komentarzy:

Uwaga! blog przeniesiony

Posty na tym blogu już nie będą się pojawiać. Zapraszam gorąco pod nowy adres: blog.grzegorzpawlik.com
Komentowanie artykułów możliwe jest pod nowym adresem.