Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 1 Dołączył: 6.12.2007 Ostrzeżenie: (0%)
|
Ostatnio mnie nurtuje pytanie dot. OOP... mianowicie mam nastepujace pytania:
1. Czy wlasciwym jest pisac np. klase user uzywac jej w ten sposob by do kazdej metody podawac jakies argumenty ktore w rzeczywistosci beda odnosic sie do roznych userow? Czy tworzyc instancje klasy danego user i w tym momencie wszystkie metody obiektu nie przyjmuja argumentow dotyczących tego na jakim userze ma wykonywac operacje, poniewaz operuje na obecnym stanie obiektu - danym userze. 2. Jesli przyjac powyzsza idee, to jak rozwiazac problem gdy dany obiekt wyjsciowo ma reprezentowac jakis string. Generowac napis ktory ma zostac wyswietlony. Takich napisow ma byc 30. Tworzyc 30 obiektow tylko po to zeby je wydrukowac? Chyba troche malo optymlanie... z drugiej strony jesli skorzystac z jednego obiektu do budowania tych 30 napisow to moj obiekt zamini sie w mala fabryke i juz nie bedzie tak swietnie implementowal idei obiektowosci (tak mysle, moze blednie). Ten post edytował Beynar 19.05.2008, 22:00:08 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%)
|
1. Oba rozwiązania mają wady i zalety i wbrew pozorom user jako reprezentant wszystkich użytkowników nie jest programowaniem strukturalnym. Wielu programistów zadaje sobie pytanie co powinno być modelem. W znanym CakePHP modelem jest cała tabela.
Ja zawsze skłaniałem się ku rozwiązaniu gdzie 1 użytkownik = 1 obiekt User. Głównym jego plusem jest naturalność w korzystaniu i łatwość w operowaniu danymi. Minusem w porównaniu z rozwiązaniem alternatywnym może być szybkość oraz konieczność konwertowania rekordów z bazy danych na obiekty. Jest to szczególnie istotne kiedy na przykład chcesz wyświetlić tabelę podstawowych informacji 100 użytkowników. Aby radzić sobie z takimi sytuacjami można w klasie User implementować metody statyczne, które upraszczają i przyspieszają wykonywanie kluczowych operacji na wielu użytkownikach na raz. Przykładem takiej metody może być: User::getUsers() która zwraca tabelkę z gotowymi do wyświetlenia informacjami. Rozwiązanie 1 User = 1 użytkownik + metody statyczne zapewnia jeden punkt dostępowy do całej tabeli użytkowników i posiada zalety obu rozwiązań. 2. Adresy URL warto rozwiązać podobnie jak w przypadku użytkowników. Wszystkie najczęstsze metody warto zaimplementować statycznie, aby nie tworzyć zbędnie obiektów. Nie warto wszystkiego implementować w ten sposób (a tym samym tworzyć jednego obiektu który zawiera wszystkie takie metody), ponieważ skończy się to na implementacji wielu metod wymagających bardzo wielu niezrozumiałych parametrów. Jeżeli występuje potrzeba stworzenia skomplikowanego i nietypowego URLa można stworzyć obiekt i użyć zwykłych metod aby łatwo wygenerować porządany adres. Osobiście właśnie tak piszę moje strony. Najważniejsze w tego typu pisaniu jest poprawne decydowanie o tym co może być statyczne, a co nie. |
|
|
|
Beynar Jak traktowac obiekty? 19.05.2008, 17:08:10
dr_bonzo 1.
Cytat1. Czy wlasciwym jest pisac np. klase user... 19.05.2008, 18:14:17
Beynar Dzięki za odpowiedź
Cytat(dr_bonzo @ 19.05.20... 19.05.2008, 18:59:32
dr_bonzo A ktora chcialo by ci sie pisac 1000 razy w aplika... 19.05.2008, 19:26:34
Beynar Czyli u Ciebie adres żądania sam router sobie przy... 19.05.2008, 19:58:11
zzeus Właśnie też się ostatnio zastanawiam nad tym probl... 19.05.2008, 21:11:48
Beynar Logicznym rozwiazaniem takiej obiektowości userow ... 19.05.2008, 21:46:30 
jarek_bolo Cytat(Beynar @ 19.05.2008, 22:46:30 )... 19.05.2008, 23:26:09
Crozin CytatWg. mnie statyczna może być np. kie... 19.05.2008, 23:30:28
Beynar Tak macie racje Panowie... troche się zapędziłem z... 23.05.2008, 08:43:25
Crozin To dodaj trochę[PHP] pobierz, plaintext <?phppr... 23.05.2008, 09:09:18 ![]() ![]() |
|
Aktualny czas: 30.12.2025 - 14:07 |