Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Własny framework MVC
Forum PHP.pl > Forum > PHP
strefa
Witam.

Przez ostatnie kilka dni dość mocno przeglądałem forum 'Pro' pod kątem wszelkich informacji o implementacji MVC, wchodzi na to że podstawową zasadą jeżeli chodzi ogólnie o OOP w PHP jest żeby robić jak komu wygodnie a nie stricte trzymać się wzorców. Dodatkowo przestudiowałem TinyMVC, SimpleMVC i EuropaPHP ( szczątkowo ). Chwilowo mój framework luźno bazuje na MVC, przy czym Moduł rozbity jest na DAO( Data Access Object ) oraz głupiutkie klasy-kontenery. Mam kilka problemów:

1. Chcąc pobrać newsy z bazy, łącznie z loginem twórcy newsa potrzebowałem jednego zapytania z INNER JOINi otrzymywałem co chciałem. Jednak przy DAO jakoś tego nie widze, zdaj mi się że NewsModel powinien przechowywać instancję UserModel. Widzę dwa wyjścia: pozwolić NewsDao na korzystanie z tabeli 'users' ( złamanie zasad Dao ) lub wykonać zapytanie o newsy a później do każdego newsa dociągnąć userów, co generuje 101 zapytań dla 100 newsów!!

2. Czy ten framework jest jeszcze gdzieś dostępny? ( poszukuję w celu analizy kodu )

3. Mam nieco problemu ze stworzeniem statycznej treści na stronie, mam tu na myśli to co się zawsze wyswietla, tj. nagłówek, menu, stopka, w tej chwili tego nie potrzebuję, jednak jest to funkcjonalność jaką docelowo muszę osiągnąć. Znalazłem coś o aplecie czyli krótkim kodzie, który ma za zadanie tylko i wyłącznie wyświetlić jakiś fragment strony, np. menu. Są one kolejkowane w łańcuchu akcji i w ten sposób każdy z nich niejako 'dopisuje' swoją część do tego co jest na końcu wyświetlane. Wydaje mi się to dobrym rozwiązaniem, jednak może widzicie wady tego systemu?
erix
Cytat
Jednak przy DAO jakoś tego nie widze, zdaj mi się że NewsModel powinien przechowywać instancję UserModel.

W swoim nie korzystam z jakichś sztywnych połączeń - jeśli potrzebuję relacji, korzystam z metody connect i paroma parametrami. Jak już chcesz na upartego, na sztywno, to nie wciskaj instancji klasy, tylko rób tak, jak jest w większości FW robione: zmienne hasOne, hasMany i hasAndBelongsToMany. Zerknij sobie np. do CakePHP, to zobaczysz jak to jest tam zrealizowane.

Cytat
na korzystanie z tabeli 'users' ( złamanie zasad Dao ) lub wykonać zapytanie o newsy a później do każdego newsa dociągnąć userów, co generuje 101 zapytań dla 100 newsów!!

No nawet w samej konstrukcji zapytania nie da się uniknąć korzystania ze wszystkich powiązanych tabel. winksmiley.jpg Ale jedno zapytanie dla każdego newsa z osobna, to już masakra.

Cytat
Mam nieco problemu ze stworzeniem statycznej treści na stronie, mam tu na myśli to co się zawsze wyswietla, tj. nagłówek, menu, stopka

Hmm, przecież takie rzeczy trzyma się zwykle w szkielecie, a dane pobiera do niego we front controllerze (chyba dobrze pamiętam winksmiley.jpg)

Cytat
Znalazłem coś o aplecie czyli krótkim kodzie, który ma za zadanie tylko i wyłącznie wyświetlić jakiś fragment strony, np. menu.

No tak, ale po co, skoro jest ten element zawsze wyświetlany? Jak chcesz, to możesz sobie podzielić w jakimś szablonie, ale ładowanie do tego apletu/helpera jest raczej bez sensu. Ale w np. paginatorze już jak najbardziej ma sens.
strefa
Cytat(erix @ 16.04.2010, 19:49:21 ) *
W swoim nie korzystam z jakichś sztywnych połączeń - jeśli potrzebuję relacji, korzystam z metody connect i paroma parametrami. Jak już chcesz na upartego, na sztywno, to nie wciskaj instancji klasy, tylko rób tak, jak jest w większości FW robione: zmienne hasOne, hasMany i hasAndBelongsToMany. Zerknij sobie np. do CakePHP, to zobaczysz jak to jest tam zrealizowane.
Coś za CakePHP się zabrać nie mogłem, wolałem coś jak TinyMVC, simpleMVC, gdzie już nazwa sugeruje że jest proste tongue.gif Zaraz się zabiorę do analizowania CakePHP.

Cytat(erix @ 16.04.2010, 19:49:21 ) *
No nawet w samej konstrukcji zapytania nie da się uniknąć korzystania ze wszystkich powiązanych tabel. winksmiley.jpg Ale jedno zapytanie dla każdego newsa z osobna, to już masakra.
Mówiąc "wykonać zapytanie o newsy a później do każdego newsa dociągnąć userów" miałem na myśli że każdy NewsModel uruchomi UserDao i pobierze sobie w ten sposób dane o użytkownikach, dlatego wyszło mi te 101 zapytań, co jest dla mnie ilością nie do przyjęcia sciana.gif

Cytat(erix @ 16.04.2010, 19:49:21 ) *
Hmm, przecież takie rzeczy trzyma się zwykle w szkielecie, a dane pobiera do niego we front controllerze (chyba dobrze pamiętam winksmiley.jpg)
(...)
No tak, ale po co, skoro jest ten element zawsze wyświetlany? Jak chcesz, to możesz sobie podzielić w jakimś szablonie, ale ładowanie do tego apletu/helpera jest raczej bez sensu. Ale w np. paginatorze już jak najbardziej ma sens.
Gdyby to było zaszyte tak całkiem na stałe to najprawdopodobniej umieściłbym to w samym pliku szablonu, ale chciałem zapewnić możliwość dodawania usuwania bloków z tego widoku, tak by admin( de facto ja biggrin.gif ) mógł sobie dodać np. panel z reklamami czy z losowymi obrazkami ze strony lub też zmienić kolejność wyświetlania na stronie, bez konieczności żmudnego przerabiania szablonów.
erix
Cytat
Mówiąc "wykonać zapytanie o newsy a później do każdego newsa dociągnąć userów" miałem na myśli że każdy NewsModel uruchomi UserDao i pobierze sobie w ten sposób dane o użytkownikach, dlatego wyszło mi te 101 zapytań, co jest dla mnie ilością nie do przyjęcia

Dla każdego jest nie do przyjęcia. Generalnie wszystko sprowadza się do zbudowania odpowiedniego zapytania, wykonania go i odpowiedniego "pompowania" otrzymanych danych do połączonych modeli.

Cytat
mógł sobie dodać np. panel z reklamami czy z losowymi obrazkami ze strony lub też zmienić kolejność wyświetlania na stronie, bez konieczności żmudnego przerabiania szablonów.

No to wypadałoby precyzować zawczasu. winksmiley.jpg

A widgety (raczej tak się przyjęło nazywać to, o czym mówisz), to racja - w osobnych "modułach".
marcio
Ad 2.Kiedys sam szukalem i niestety nie udalo mi sie nigdzie znalesc zadnej paczki z tym fw a szkoda ;/
Ad 3. Tak jak pisal @Erix mozesz zaimplementowac widget'y/aplety lub jak kto woli to nazywac wazne ze o to samo chodzi haha.gif jednak wedlug mnie takie rzeczy powinienes miec w glownym szablonie/widoku aplikacji gdzie wymiana stopki,header ograniczy cie tylko do modyfikacji tego szablonu/widoku.
Do tego radze zainteresowac sie modularnoscia.
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.