![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Piszę grę, zastanawiam się jak rozplanować sobie klasy, czy wrzucić wszystko do worka czy nie, chodzi dokładnie o to, że obecnie mam dwie klasy, jedna służy do zarządzania samymi użytkownikami, tj. logowanie, zmiana hasła, rejestracja etc. druga natomiast obsługuje rzeczy związane stricte z grą, punkty, surowce. Zastanawiam się czy połączyć je jakoś, czy zostawić w takiej postaci. Póki co wiem, za co każda odpowiada i gdzie czego szukać, wydaje się to przemawiać na korzyść tego rozwiązania.
Drugie pytanie: chcę mieć możliwość zwrócenia danych w odpowiednim formacie np. JSON, XML, z początku myślałem o rozwiązaniach rodem z C#, np. klasa.metoda().toString() odpowiednikiem w php byłaby klasa-> metoda()-> toString() czy da się coś takiego zrobić? Drugim rozwiązaniem jest napisanie klasy, która przyjmowałaby dwa argumenty dane i format w jakim mają zostać zwrócone, jednak druga konstrukcja jest o wiele mniej wygodna. |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
1. Zdecydowanie nie. Takie super mega klasy robiące wszystko są wynikiem nieznajomości programowania obiektowego.
2. Ja bym napisał klasę renderera na zasadzie:
Twój obiekt, który chcesz wyświetlić to obiekt klasy Document. Przekazujesz go do obiektu konkretnego renderera, który zwraca Ci dokument w odpowiednim formacie. Użycie:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat Drugie pytanie: chcę mieć możliwość zwrócenia danych w odpowiednim formacie np. JSON, XML, z początku myślałem o rozwiązaniach rodem z C#, np. klasa.metoda().toString() odpowiednikiem w php byłaby klasa-> metoda()-> toString() czy da się coś takiego zrobić? Da się: http://www.webnote.pl/method-chaining-w-php.html Cytat Piszę grę, zastanawiam się jak rozplanować sobie klasy, czy wrzucić wszystko do worka czy nie, chodzi dokładnie o to, że obecnie mam dwie klasy, jedna służy do zarządzania samymi użytkownikami, tj. logowanie, zmiana hasła, rejestracja etc. druga natomiast obsługuje rzeczy związane stricte z grą, punkty, surowce. Zastanawiam się czy połączyć je jakoś, czy zostawić w takiej postaci. Póki co wiem, za co każda odpowiada i gdzie czego szukać, wydaje się to przemawiać na korzyść tego rozwiązania. IMO lepiej rozbić sobie te klasy. Niech każda odpowiada za coś specyficznego. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Ikar póki co są rozbite. I nie chodziło mi o to co podałeś w linku, ten sposób znam ale nie o to mi chodziło.
Wytłumaczę jeszcze raz, chcę to móc wywołać na każdej metodzie w klasie w podany wyżej sposób, ale tak aby ta funkcja automatycznie pobrała wynik działania poprzedniej metody i go odpowiednio obrobiła. |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
By móc wywołać $obiekt-> metoda()->toString() metoda metoda() obiektu $obiekt musi zwrócić obiekt, który będzie posiadał metodę toString(). Czyli mniej-więcej:
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Pomysłów miałem wiele, na ten nie wpadłem. (IMG:style_emoticons/default/wink.gif) teraz tylko dodać do konstruktora parametr, zapisać sobie w zmiennej. Po przespanej nocy lepiej człowiek funkcjonuje. Dzięki.
Pamiętajcie programiści, z problemem lepiej się przespać. (IMG:style_emoticons/default/wink.gif) Ten post edytował Fifi209 24.01.2012, 09:29:03 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ikar póki co są rozbite. I nie chodziło mi o to co podałeś w linku, ten sposób znam ale nie o to mi chodziło. Wytłumaczę jeszcze raz, chcę to móc wywołać na każdej metodzie w klasie w podany wyżej sposób, ale tak aby ta funkcja automatycznie pobrała wynik działania poprzedniej metody i go odpowiednio obrobiła. W php się tego inaczej nie da zrobić. Musisz zwrócić albo obiekt w którym jesteś, albo utworzyć jakiś obiekt. Generalnie musisz cokolwiek zwrócić żeby móc operować na danych z tej konkretnej metody. Niestety taki jest php (IMG:style_emoticons/default/wink.gif) Przykład phpion'a jest dobry, ale żeby ci to lepiej pokazać zrobiłbym to tak:
Teraz już w sumie powinieneś wiedzieć mniej więcej o co chodzi (IMG:style_emoticons/default/wink.gif) EDIT: zdecydowanie nie można jeść śniadania jednocześnie pisząc, bo jak widać piszę się jednego posta prawie 20min (IMG:style_emoticons/default/tongue.gif) Ten post edytował by_ikar 24.01.2012, 09:50:09 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Rozwiązanie z klasą posiadającą metody to*() jest moim zdaniem gorsze od zaprezentowanego przeze mnie (osobne klasy). Dlaczego?
1. Lepiej jest dokładać nowe klasy zwracające dane w nowych formatach niż dokładać metody do istniejącej klasy. 2. Co w przypadku gdy potrzebujesz zwrócić dane w jednym formacie, ale w różny sposób (np. różne kodowanie XMLa)? Lepiej utworzyć nową klasę dziedziczącą po (przykładowo) Renderer_Xml, w której zmieni się jedynie parametr encoding. 3. Każda klasa może mieć dowolne parametry "konfiguracyjne" (jak chociażby wspomniany encoding dla XMLa) właściwe tylko dla swojego typu zwracanych danych. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:17 |