![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Ze względu na mało kreatywnych tematów na forum php Pro proponuję taką dyskusję.
Które z rozwiązań wydaje wam się korzystniejsze: ORM Stricte mapowanie bazy danych do obiektów, które następnie można łatwo wykorzystać w php. Bardzo intuicyjne i wygodne, szczególnie jeśli zaimplementujemy rozwiązanie, które jest w stanie na bieżąco odwzorowywać zmiany w bazie danych (dodatkowe tabele, itd.). Dodawanie nowej klasy to po prostu stworzenie dodatkowej tabeli, nowy obiekt to rekord. Wadą jest brak pewnej unifikacji i kłopot z utworzeniem drzewa obiektów, ale myślę, że jest to do obejścia. Przykład takiego rozwiązania możemy znaleźć w Ruby on Rails. VFS Wirtualny system plików też jest ciekawym rozwiązaniem, wprowadzającym jakby dodatkową strukturę w bazie danych, która następnie jest odwzorowywana w postaci obiektów php. Rozwiązanie o tyle dobre, że automatycznie wprowadza nam pewną strukturę drzewiastą, w której mamy nasze obiekty i w jednej gałęzi mogą znajdować się różne obiekty, np. artykuły, komentarze, pliki, itd. Największą wadą jest to, że wprowadzamy dodatkową "warstwę" modelu, która musi te wszystkie elementy poskładać w całość i przedstawić w postaci obiektów i dodatkowych narzędzi do ich wyszukiwania/pobierania. Jest to nieco mniej intuicyjne, gdyż dodanie nowej klasy/obiektu wymaga znajomości pewnych założeń systemu plików i jeśli nie jest do tego udostępnione dodatkowe narzędzie to mamy problem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Przykładowe drzewo takiego systemu plików: http://www.binarychoice.pl/_images/p28/carbon-uml.gif Mam nadzieję Seth, że nie masz nic przeciwko (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Oba rozwiązania mają swoje minusy, ja planowałem zaimplementować w swoich projektach VFS, ale przyglądając się prezentacjom Ruby on Rails byłem mile zaskoczony prostotą ich ORM-a. Chyba najlepszym rozwiązaniem będzie jakieś połączenie obu rozwiązań. Cóż więcej mogę powiedzieć - do dyskusji koledzy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mi bardzo podobają się rozwiązania ORM ponieważ dają one na prawdę dużego kopa. Nie miałem styczności w praktyce z VFS, ale prawdę mówiąc patrząc na ORM a VFS nie widzę dużej różnicy, chociaż wydaje mi się, że mapowanie jest jakby bardziej zgeneralizowane, nie narzuca struktrury i zależności.
W ORM myśli się w kategorii obiektu tak jak nakazuje idea projektowania obiektowego a nie w kategorii plik/katalog jak przy VFSie. Chociaż prawdę mówiąc wzorzec ActiveRecord w najprostszej postaci jest o wiele prostszy niż VFS, który polega na kompozycji. W ORM dzięki zastosowaniu wzorca Foregin Key Mapping możemy bez problemu zrobić sobie kompozycję łącznie z self-reference. Foregin Key Mapping umożliwia z kolei zastosowanie wzorca LazyLoad, ponieważ wiemy na jakiej podstawie dołączać kolejne rekordy, jak wygląda związek pomiędzy nimi. Zastosowanie ORM daje możliwość stworzenia na prawdę złożonego CRUDa, a stąd niedaleko już do zaprojektuj bazę i kliknij generuj (przykład?) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Sam zastosowałem parę razy Propela (wzorowany na innym ORM dla Javy) i muszę powiedzieć że dzięki niemu cały kod jest bardziej przejżysty, nie muszę się męczyć z tworzeniem modeli i tak dalej, ponieważ kod mi się generuje ze struktury sam. Co do tworzenia tabel na podstawie klas - myślę że to nie jest problem - zastosowanie Reflection API + odczyt komentarzy php Doca i mamy gotowce, chociaż działanie w tą stronę wydaje mi się trudniejsze. Z resztą dla Javy jest X-Doclet który wspomaga pracę z wieloma narzędziami, w tym i z Hibernate. Jeśli ktoś poda przykład implementacji VFSa mogę dyskutować dalej.. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ten post edytował splatch 8.02.2006, 19:32:52 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 17:37 |