Tworzenie małych obiektów a funkcje proceduralne |
Tworzenie małych obiektów a funkcje proceduralne |
29.11.2011, 13:42:04
Post
#1
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
Zastanawiam się czy warto tworzyć małe klasy z kilkoma funkcjami zamiast tworzenia po prostu samych funkcji, jak choćby do wyświetlania komentarzy przy newsach czy artykułach, do generowania menu, do formatowania dat i czasu? Funkcje same w sobie spełniają założoną funkcjonalność jednak w obiekcie były by prostsze w użyciu i dawały większe możliwości manewrowania danymi, choć nie wiem czy takie rozwiązania nie były by wtedy bardziej obciążające dla samego serwera.
Jakieś rady od wprawionych już w boju?? |
|
|
29.11.2011, 13:44:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 31 Dołączył: 14.12.2010 Skąd: Wrocław Ostrzeżenie: (0%) |
czy warto?To zleży od osoby, stylu pisania itp. Czy powinno się?Tak! Nawet dla klasy która ma tylko jedną metodę , ułatwia to bardzo czytanie kodu, robi go przejrzystym i łatwym do poprawy.
-------------------- Jeżeli pomogłem kliknij "Pomógł" :)
|
|
|
29.11.2011, 13:46:07
Post
#3
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Albo programujesz obiektowo albo proceduralnie.
Z tego co zrozumiałem używasz już klas do innych większych rzeczy, więc używaj klas w całości a nie raz a raz tak. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
29.11.2011, 13:52:38
Post
#4
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
Używam klas do większych rzeczy jak szablony styli, sesje, autoryzacja uprawnień. Nie wiem tylko jak później sobie poradzić w przekazywaniem tych klas mniejszych do większych, aby nie pogarszać wydajności w dużym stopniu..
|
|
|
29.11.2011, 14:57:40
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) |
Używam klas do większych rzeczy jak szablony styli, sesje, autoryzacja uprawnień. Nie wiem tylko jak później sobie poradzić w przekazywaniem tych klas mniejszych do większych, aby nie pogarszać wydajności w dużym stopniu.. Od tego to już są wzorce projektowe. A tych metod jest kilka fajnych, chociażby ostatnio za sprawą symfony 2 popularne staje się dependency injection. Tak jak napisał @nospor obiektówka to obiektówka, jeżeli masz kilka klas a reszta kodu jest strukturalna, to żadna to obiektówka. Tak jak niektórzy autorzy CMS'ów opisując swoje dzieło że ich cms jest full oop, a w gruncie rzeczy używają tylko kilku klas, z czego większość to pdo + mailer i już tworzą z tego obiektowy cms Małe klasy z kilkoma metodami warto tworzyć, możesz wtedy tą samą klasę wykorzystać w różny sposób. Odnośnie wzorców, daleko nie szukając, praktycznie pod nosem: http://php.pl/Wortal/Artykuly/PHP/Architek...emow-w-praktyce |
|
|
29.11.2011, 19:03:36
Post
#6
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
rozumiem, a jeszcze jedno pytanie, jak można wywołać takie działanie??
bo gdyby to wyglądało tak:
no to wtedy wiadomo że przekazaliśmy sobie klasę setdata do user i wywołujemy save, ale tego pierwszego zapisu nie rozumiem, znaczy nie potrafię sobie wyobrazić jak wygląda struktura klas aby to zadziałało poprawnie a natrafiłem na taki przykład wykonania na jakiejś stronie.. |
|
|
29.11.2011, 19:14:47
Post
#7
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 14 Dołączył: 28.11.2010 Skąd: Kraków Ostrzeżenie: (0%) |
|
|
|
29.11.2011, 19:27:07
Post
#8
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
czyli mówiąc dokładniej jeśli w funkcji ala np pobiorę dane użytkownika z bazy, i wrzucę w zmienną $this->data i zwrócę $this, to byłoby to równoznaczne z takim kodem:
czy chodzi o coś innego?? |
|
|
29.11.2011, 21:45:24
Post
#9
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 14 Dołączył: 28.11.2010 Skąd: Kraków Ostrzeżenie: (0%) |
Po pierwsze twój kod nawet nie zadziała. Żeby zrobić "ciąg" wykonywanych metod, w każdej z nich musisz zwracać jakiś obiekt, w twoim przypadku tej samej klasy.
W klasie masz metody save oraz setData. W metodzie setData ustawiasz dane i w metodzie zwracasz obiekt, a dalej możesz wykonywać inne operacje.
|
|
|
29.11.2011, 21:57:07
Post
#10
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
no tak zapomniałem return wsadzić.
czyli w Twoim przykładzie gdyby tego return nie było to można by ten sam efekt otrzymać w ten sposób??
jest jakaś znacząca różnica pomiędzy oboma przykładami?? co daje takie zwracanie obiektu?? |
|
|
29.11.2011, 22:19:27
Post
#11
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 14 Dołączył: 28.11.2010 Skąd: Kraków Ostrzeżenie: (0%) |
Dokładnie tak, różnicą w tym przypadku może być wygoda pisania, zaoszczędzać parę linijek kodu
|
|
|
29.11.2011, 23:08:19
Post
#12
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
rozumie, w sumie całkiem ciekawe zastosowanie
a jest jakiś darmowy skrypt forum, cms itp napisany w 'całości' obiektowo?? |
|
|
29.11.2011, 23:12:23
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
W PHP nie ma niczego napisanego "w całości obiektowo", bo PHP nie jest językiem stricte obiektowym - jest językiem wieloparadygmatowym, a zdecydowana większość jego biblioteki standardowej jest strukturalna, więc siłą rzeczy zawsze znajdują się w nim elementy strukturalne.
|
|
|
29.11.2011, 23:16:48
Post
#14
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
dlatego całości jest w cudzysłowu, a jakiś w dużym stopniu pisany obiektowo istnieje??
|
|
|
29.11.2011, 23:19:35
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) |
Szukaj jakichś frameworków, takich jak symfony, zend, yii i tym podobne. Kilka cmsów obiektowych by się znalazło, ale przeważnie są to już napisane aplikacje z użyciem jakichś frameworków, jak chociażby ten cms: http://diem-project.org/ akurat napisanie cms'a kiedy ma się już framework to jest prosta sprawa, tak szczerze mówiąc najważniejsze są podstawy które udostępnia ci dany framework, tworzenie później newsów, artykułów, forum itp to można w niektórych cms'ach wykonać na prawdę szybko, niektóre mają gotowe generatory, lub nawet gotowe pluginy, dzięki czemu napisanie jakiegoś blogaska to może być kwestia godzin.
Kod $user->setData($data)->save(); nic innego jak method chaining: http://www.webnote.pl/method-chaining-w-php.html ciekawe, ale nie wszędzie dobrze jest to stosować, zależy tak na prawdę od tego czego chcesz od obiektu. Jeżeli powiedzmy przekazujesz do obiektu szereg danych, do różnych metod, to wtedy można bawić się w method chaining, ale wszędzie pchać tego raczej nie polecam |
|
|
30.11.2011, 00:06:32
Post
#16
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
a jest jakiś poradnik żeby się w tym całym diem połapać, bo ciężko byłoby coś popróbować robić na ślepo a plików jest tam strasznie dużo..
|
|
|
30.11.2011, 00:08:03
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
1. Dokumentacja Symfony / ZF / jQuery.
2. Dokumentacja samego projektu. |
|
|
30.11.2011, 16:48:33
Post
#18
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
Mam jeszcze jedno pytanie. Posiadam klasę odpowiedzialną za szablony z kodem html, deklarowaną na początku kodu do zmiennej. Dotychczas używałem kilku funkcji aby tę klasę wykorzystać i wprowadzać zmienne w szablon, czyli wpisywałem w funkcji global $zmienna_szablonu i działąlo to poprawnie, jednak teraz chciałbym wsadzić klasę szablonu w inną klasę odpowiadającą za przetwarzanie samego widoku oraz generowanie tego co ma się pojawić np lista newsów, artykułów itd, no i nie wiem czy deklarować klasę szablonów na początku i przy deklarowaniu drugiej klasy wprowadzić wcześniej zadeklarowane szablony do tej drugiej klasy czy też zadeklarować w pliku np index.php tą drugą klasę i w środku drugiej deklarować dopiero szablony, oba rozwiązania dadzą ten sam efekt, choć z punktu konstrukcyjnego sporo się różnią..
|
|
|
30.11.2011, 17:20:43
Post
#19
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 14 Dołączył: 28.11.2010 Skąd: Kraków Ostrzeżenie: (0%) |
Jeśli starasz się pisać "obiektowo", nie używaj czegoś takiego jak global. Skoro upierasz się przy szablonach, dlaczego nie skorzystasz chociażby z gotowych rozwiązań takich jak Twig czy Open Power Template? Ten pierwszy system jest już zespojony z Symfony2, więc jeśli tego frameworka zacząłbyś się uczyć masz wszystko na miejscu.
|
|
|
30.11.2011, 17:29:19
Post
#20
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 2 Dołączył: 17.11.2005 Ostrzeżenie: (0%) |
No właśnie nie chcę używać global, stąd moje pytanie. Rozumiem jak możliwośći dają gotowe rozwiązania jednak stawiam sobie za cel przerobić już gotowy własny system napisany w dużej części proceduralnie na obiektowy, stąd moje pytania, bo dotychczas pisałem kilka klas głównych i w funkcjach wykorzystywałem ich zastosowania, a teraz chcę łączyć ze sobą klasy a nie wiem jak by to było najlepiej zrobić, czy takie ciągłe przekazywanie sobie obiektów w konstruktach nie jest zbyt obciążające dla samego przetworzenia przy wywoływaniu tych klas.
|
|
|
Wersja Lo-Fi | Aktualny czas: 5.06.2024 - 19:55 |