Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wzorzec bądź technika
Forum PHP.pl > Forum > PHP
Fluke
Witam,

Mam do was takie pytanie odnośnie a la "wzorca" bo nie wiem czy to wzorzec czy może jakiś sposób działania(to pewnie wzorzec). Nie dotyczy on tylko framework`ów więc temat zamieściłem właśnie tutaj.

A o to koncepcja:

Mamy 3 katalogi
- Entity
- Logic
- Table

W katalogu "Entity" umieszczamy pliki związane z pojedynczym rekordem pobranym z bazy. Czyli mamy klasę "Entity_User" i w niej pola składowe: _name, _surname, _birthday... Oczywiście może zawierać referencje do innych "jednostek(Entity)" z innej tabeli. Przykład: user ma 1 zdjęcie. Pole składowe to: _userPhoto który zawiera referencję do obiektu Entity_Photo. Obiekty te będą miały metody modyfikujące jak i pobierające: getSome(), setSome()...

W katalogu "Table" będą umieszczane pliki, które opisują daną tabelę. Czyli mamy bazie tabelę o nazwie "user" więc tworzymy obiekt "Table_User". W niej możemy zawrzeć takie dane jak: nazwa tabeli, kolumny z ich parametrami, adapter bazy, itp..

W katalogu "Logic" umieszczamy pliki które odpowiadają za całą logikę. Czyli gdy chcemy pobrać użytkownika z bazy danych oraz przypisać mu zdjęcie, definiujemy metodę getUser($id). Ta metoda będzie musiała stworzyć obiekt Table_User oraz wywołać metodę np: fetchOne($select) po czym stworzyć obiekt Entity_User do którego przypisze dane pobrane z bazy. Dodatkowo będzie musiała pobrać dane odnośnie zdjęcia użytkownika i znowu przypisać do obiektu Entity_Photo oraz do Entity_User przypisać ten obiekt.

Pytanie dotyczy tego sposobu. Czy wy też wykonujecie takie czynności czy może inaczej. Czy metody modyfikujące oraz pobierające dane z bazy danych implementujecie w klasach typu Logic czy może Table. Jak w Table to co zawieracie w klasach Logic.

Pozdrawiam i dziękuję.
Crozin
1. ORM-y generalnie dzielą się na dwie "rodziny" - oparte o wzorzec ActiveRecord bądź DataMapper. Możesz pogoogleać sobie za każdą z nich, poznać co różni je i dlaczego ActiveRecord to zło. wink.gif
2. To co tutaj podałeś jako Table powinno leżeć raczej w gestii ORM-a, a nie bezpośrednio Twojego kodu.
3. Korzystaj z przestrzeni nazw; nie korzystaj z jakiś potworków w postaci znaku podkreślenia przed właściwościami niepublicznymi - na co to komu?
Fluke
@Crozin

Dzieki za szybka odpowiedz.
Zastanawial mnie jeszcze fakt tego zeby wszystkie pobierane dane z bazy danych umiescic w klasach typu table a w logice wybierac skompliowane dane ktore wymagaja pobrania dodatkowo z innych tabel. Poczym beda laczone w logiczna calosc i ewentualnie cachowane.
Crozin
Wydzielenie pobierania danych od ich przetwarzania jest bardzo dobrym pomysłem, który jest powszechnie stosowany. W zależności od wielkości projektu będziesz miał od jednego do kilku różnych obiektów odpowiedzialnych za samo pobieranie danych danego typu i całą masę innych obiektów korzystających z nich do pobierania/zapisywania danych i ich przetwarzania.
Fluke
Dzięki @Crozin

Myślę, że wiem co robić teraz.

Pozdro smile.gif
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.