Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Lekki System obsługi baz danych
Forum PHP.pl > Forum > PHP
daniel1302
Witam, ostatnio pracuję nad wysoce nie wydajną aplikacją, dlatego mam pytanie.
Przeważnie używałem w swoim frameworku modułu zaczerpniętego z ZF Zend_Db_ActiveRecord
Jednak tutaj jest on za ciężki i zbyt toporny.

Aplikacja będzie korzystała z dwóch źródeł danych:
XML, MySQL

Jako, że z bazy danych zapytania będą pobierane w sposób dosyć zaawansowany najlepiej było by mi zastosować język SQL bezpośrednio w Modelu. Tylko tutaj jest problem bo
1) Przeczę architekturze MVC(Model nie powinien wiedzieć w jaki sposób ani skąd pobierane są dane)
2) Potrzebuję pobrać dane(w kilu modelach) z plików XML

Proszę o poradę, ja widzę takie rozwiązanie, mam 2 klasy abstrakcyjne(do XML, i DB) i zależności skąd pobieram stąd dziedziczę. Rozwiązanie wydaje mi się nieeleganckie(szczególnie użycie składni SQL w modelu)

Pozdrawiam Daniel
Uriziel01
'nieeleganckie' ? Wzorzec MVC jest... no właśnie 'wzorcem' (z resztą jednym z wielu) i jeżeli utrzymywanie konwencji modelu który nie jest zależny od źródła danych znacząco utrudnia implementację efektywnego rozwiązania, poprostu złam tę konwencję. Nie widzę w tym niczego szczególnie nieeleganckiego. A już całkowicie odrębną sprawą jest wydajność wszelkich modułów ZF które (bardzo delikatnie rzecz ujmująć) są poprostu toporne.
Crozin
Cytat
Przeczę architekturze MVC(Model nie powinien wiedzieć w jaki sposób ani skąd pobierane są dane)
Chyba sobie coś pomieszałeś, bo to właśnie Model jest tą częścią aplikacji, która jest świadoma źródła danych. To ta warstwa zawiera w sobie wszystkie zapytania SQL, manipulacje na XML-u czy mapowanie danych z bazy/XML-a, do obiektów.

Cytat
Proszę o poradę, ja widzę takie rozwiązanie, mam 2 klasy abstrakcyjne(do XML, i DB) i zależności skąd pobieram stąd dziedziczę. Rozwiązanie wydaje mi się nieeleganckie(szczególnie użycie składni SQL w modelu)
Złe rozwiązanie - chodzi o dziedziczenie. Już pomijając ogólną sprzeczność z charakterystyką OOP (te modele wykorzystują bazę danych czy XML, a nie rozszerzają) takie coś może powodować sporo problemów w przyszłości. Różne elementy modelu, w szczególności Encje, Usługi (ang. Services) i Repozytoria, powinny dążyć do nieukazywania czegokolwiek związanego ze źródłem danych w swoich publicznych interfejsach.

Swoją drogą proponowałbym zainteresować się Doctrine2, a przynajmniej jego architekturą. Bardzo ładnie odtworzyli to, co zostało wymyślone już wiele, wiele lat temu i do tej pory cieszy się dobrym powodzeniem - bo się sprawdziło.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.