[PHP]Własny mini wzór projektowy, Dla siebie |
[PHP]Własny mini wzór projektowy, Dla siebie |
15.10.2009, 17:57:35
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Witam.
Ostatnio postanowiłem wgłębić się w tematykę OOP. Trochę już umiem, może i tyle, żeby spróbować coś napisać większego, typu księga gości (o ile to można nazwać czymś większym ;P). Mam kilka pytań. 1. Jak rozmieszczać pliki na serwerze? W jakich folderach? Tak sobie obmyśliłem żeby było mniej więcej tak: /public_html/index.php /public_html/naglowek.php /public_html/stopka.php itd. /public_html/class/class.mysql.php /public_html/class/class.ksiega.php ew. itd. W plikach w katalogu głównym bym wywoływał w bloku try { } obiekty. 2. I tu właśnie. Czy wszystkie metody w klasie, mające new Exception (wyjątek) mają być definiowane w bloku try { }? Jeżeli tak to praktycznie cała strona będzie w bloku try bo wszędzie się może zdarzyć np. puste pole, taki nick istnieje, i inne wyjątki. 3. Nie chcę również obsługiwać różnych baz danych. Tylko MySQL. Aż takiej uniwersalności skryptu nie chcę. Z jednego powodu - nie umiem czegoś takiego napisać a w polskim internecie niestety nie ma dobrych materiałów na ten temat. Nauczę się z czasem. 4. Od razu pragnę zaznaczyć że nie interesują mnie CHWILOWO gotowe wzory projektowe z internetu, które już ktoś zrobił, do których trzeba się koniecznie stosować. Ta strona jest na mój własny użytek i nie ma potrzeby żeby była tak jak ktoś sobie napisał, że ma być. Mam nadzieję że wiecie o co chodzi. Jeżeli macie jakieś dodatkowe rady to z chęcią wysłucham. Pozdrawiam i dziękuję. -------------------- O! Zimniok :P
|
|
|
16.10.2009, 04:22:25
Post
#2
|
|
Grupa: Zarejestrowani Postów: 352 Pomógł: 53 Dołączył: 10.08.2009 Ostrzeżenie: (0%) |
1. Jak sobie rozmieścisz to Twoje. Ważne żebyś to ogranął i patrząc na to nie myślał jak filozof patrzący w nocnik: "To przechodzi ludzkie pojęcie "
2. Nie przesadzaj z try catch może czasami lepiej switchem albo ifem coś sprawdzić? 3. Zapraszam na PW - pokażę Ci jak to napisać 4. No tak trzymać Rady? Rób tak, żebyś Ty był zadowolony. A później tak, żeby interpreter była zadowolony (wydajność). A jak komuś coś się nie będzie podobać to mów to już było Im szybciej wykształcisz włąsne (oczywiście tylko dobre ) nawyki tym lepiej. Ważne żebyś trzymał się cały czas jednej konwencji i nie skakał z kwiatka na kwiatek |
|
|
16.10.2009, 09:02:06
Post
#3
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
1) Zależy co trzymasz w tych plikach
2) Nie musisz ( http://pl2.php.net/manual/pl/function.set-...ion-handler.php ) ale możesz 3) Użyj PDO, najbardziej uniwersalne narzędzie zachowujące przy tym prawie identyczną prędkość wykonywania niż biblioteki wyspecjalizowane w obsłudze danego silnika baz danych 4) MVC jest najpopularniejszy i możliwe, że najbardziej słuszny wzorzec. Problem polega na tym jak go zaimplementujesz. Prawie każdy ma inny sposób, lepszy, gorszy a czasem nawet tragiczny. Wszystko zalezy od ciebie i co chcesz z nim dokładniej zrobić. -------------------- |
|
|
16.10.2009, 12:31:03
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Ok dzieki wam, ale moze zarzuccie jakimis konkretami np do punktu 2. Bo nie bardzo wiem jak np w body.php (gdzie jest tresc strony) wyswietlac newsy. W bloku try? Wywolywac obiekty? Probowalem tak, dziala tylko czy to jest aby dobre rozwiazanie.
-------------------- O! Zimniok :P
|
|
|
16.10.2009, 22:17:48
Post
#5
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) |
Chyba mylimy pojęcia, chcesz includować jakieś stopki sropki do pliku index.php?
po 1, to jest mało praktyczne, includować to Ty sobie możesz templatke do maili po 2, jak już OOP to OOP a nie chgw co. po 3, w pliku index wywołaj dispatcher, który będzie Ci ładował odpowiednie moduły z księgi gości, u mnie na blogu masz opisane ładnie po 4, zainwestuj 2 dni w nauke smartów. Cytat 3) Użyj PDO, najbardziej uniwersalne narzędzie zachowujące przy tym prawie identyczną prędkość wykonywania niż biblioteki wyspecjalizowane w obsłudze danego silnika baz danych gdybym miał drukarkę, wydrukowałbym sobie to i zamieścił w galerii "niedouki". bezsens. Cytat 4) MVC jest najpopularniejszy i możliwe, że najbardziej słuszny wzorzec. Problem polega na tym jak go zaimplementujesz. Prawie każdy ma inny sposób, lepszy, gorszy a czasem nawet tragiczny. Wszystko zalezy od ciebie i co chcesz z nim dokładniej zrobić. n/c Problem w implementacji MVC jest taki, że go nie ma! MVC - model vidok controler, w modelu trzymasz metody w ktorych masz kod sql, w widoku trzymasz metody parsujące templatke, a w controlerze sprawdzasz dane jakie dostałeś z akcji, i dokonujesz wyboru co zrobić, czy zapytać bazę i wyświetlić coś z bazy, czy walnąć mu brakiem dostępu itp. No sztuka, oj sztuka, co najmniej doktorata trzeba pisać z tego by to ogarnąć. -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
17.10.2009, 12:00:45
Post
#6
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
gdybym miał drukarkę, wydrukowałbym sobie to i zamieścił w galerii "niedouki". Udowodnij albo sprawdź. Cytat bezsens. To synonim słowa "cojack" Co widzisz w tym złego chłopcze? -------------------- |
|
|
17.10.2009, 13:39:02
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Chyba troche zboczylismy z tematu. Jak juz mowilem, nie interesuja mnie rzeczy typu MVC, ktorych nie rozumiem.. jeszcze. Rozumiem ze za pomoca smartow moge np wyswietlic wpisy. Nawet jezeli mam w klasie petle while w ktorej wyswietlam newsy pobierane z bazy? Jak to do HTMLa przeniesc?
-------------------- O! Zimniok :P
|
|
|
17.10.2009, 13:58:28
Post
#8
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) |
cojack -> zgadzam się, że w teorii wzorzec wygląda prościutko, ale w praktyce popatrz sobie na popularne frameworki, co w nich ludzie implementują i sprzedają pod nazwą "MVC"... jak widać, prostota wzorca niespecjalnie przekłada się na jego zrozumienie nawet u doświadczonych programistów.
MateuszScirka -> mimo iż PDO obsługuje sporo baz danych*, warto z niego korzystać chociażby dlatego, że jest obiektowy i dużo lepiej napisany, niż natywne rozszerzenia, a przy stosowaniu podpinania danych właściwie całkowicie odporny na SQL Injection. Ponadto jest to jedyne rozszerzenie, które faktycznie ma obsługę błędów, a nie jakieś pseudointeligentne funkcje w stylu mysql_error() i ostrzeżenia, które mówią wszystko, tylko nie to, co potrzeba i wywalają się wszędzie, tylko nie tam, gdzie powinny. Ponadto jeśli już chcesz iść w systemy szablonów, to Smarty (TEN Smarty, a nie "te" Smarty - nauczcież się wreszcie ludzie to poprawnie odmieniać...) akurat jest jednym z gorszych wyborów: przestarzały, źle napisany, powolny, prezentujący złe i nieeleganckie podejście do problemu. Jest co najmniej kilka znacznie lepszych projektów, jeden z nich znajdziesz w mojej stopce. * - co nie znaczy, że samo jego użycie gwarantuje poprawne działanie wszystkich systemów bazodanowych. Ten post edytował Zyx 17.10.2009, 13:58:43 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
17.10.2009, 14:10:54
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Widze nie da sie napisac strony w obiektowym bez uzycia jakis "wtyczek" itp? Prosze czytac moj 1szy post do konca. Nie chce NIC pobierac, zadnych .php z pomocniczymi skryptami, ani SMARTA ani Open Power Template 2 ani nic innego dopuki nie naucze sie pisac bez tego. Po prostu musze sie nauczyc mieszac kod html z obiektowym php bo w klasie przeciez nie napisze tabelii calej a potem nie wywolam w okreslonym miejscu strony... chociaz...
-------------------- O! Zimniok :P
|
|
|
17.10.2009, 15:27:16
Post
#10
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) |
Da się napisać bez gotowych skryptów, tylko masz wtedy dużo więcej pisania. Przy większych projektach nikt tak nie robi, gdyż się nie opłaca pisać wszystkiego od zera za każdym razem, gdy siadasz do nowego zadania. Pamiętaj też, że "wzorzec projektowy" a "gotowy skrypt" to zasadnicza różnica. O ile te drugie w celach edukacyjnych możesz pominąć, to pierwszych - nie, gdyż to są właśnie sprawdzone sposoby rozwiązania typowych problemów, jakie można spotkać. Natrafiasz na problem i patrzysz, że dany wzorzec pozwala Ci go rozwiązać, podpowiadając Ci, jak powinieneś zorganizować klasy, jak powinny wyglądać zależności między nimi i co one Ci dają. Zamiast pytać się na forum o to samo i dostawać taką samą odpowiedź, masz ładnie skatalogowany opis problemu i sposób jego rozwiązania, przez co się dodatkowo uczysz, analizując takie przypadki. I tu dochodzimy do jednej z takich praktyk: nie powinno się mieszać kodu PHP odpowiedzialnego za przetwarzanie danych z kodem HTML, co oznacza, że w Twoich klasach nie powinno być ani bajta kodu HTML. Sposób wyświetlania danych powinieneś zapisać w czymś oddzielnym, najczęściej jest to oddzielny plik zwany szablonem, który można napisać w PHP (i tu już możesz mieszać HTML z PHP, i to niekoniecznie obiektowym), albo w innym języku, teoretycznie lepiej dostosowanym do tego zadania.
Natomiast PDO powinieneś mimo wszystko użyć z kilku powodów: 1. Jest wbudowane w PHP, nie musisz nic instalować itd. 2. Z bazą danych i tak musisz się łączyć i komunikować. Bez przesady, żaden trzeźwo myślący programista nie będzie tego implementować samodzielnie, tylko użyje któregoś z gotowych rozszerzeń: albo opakuje stare funkcje w obiektówkę, albo skorzysta właśnie z PDO. Opakowywanie własnoręczne to masochizm, zwłaszcza gdy - jak sam piszesz - jest to dla Ciebie jeszcze nowość. Wyjdzie Ci coś, co z obiektówką ma tylko tyle wspólnego, że wokół function cośtam() są klamerki i słowo kluczowe class... 3. Nie nauczysz się dobrze programować obiektowo, a przynajmniej zajmie Ci to dużo więcej czasu, jeśli nie będziesz choć trochę korzystać z gotowego obiektowego kodu, który będzie lepiej napisany i pokaże Ci, jak dana rzecz powinna wyglądać. 4. Ucz się dobrych, porządnych praktyk od samego początku, jak już chcesz się uczyć. Ten post edytował Zyx 17.10.2009, 15:27:32 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
17.10.2009, 15:38:07
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Ok, ale zalozmy mam takie cos. Mam tabele w bazie id,nick,text. Nic nadzwyczajnego. W klasie robie
i chce to umiescic w odpowiedniej tabeli/divie, zmienic czcionke itd. Czy za pomoca wzorca to zrobie? No pewnie tak, ale mozecie podac przyklad uzycia? tak aby byla w tym petla while? -------------------- O! Zimniok :P
|
|
|
18.10.2009, 07:45:23
Post
#12
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) |
Oczywiście. Oto pseudokod pobierający dane:
A oto przykładowy szablon (szablon.php):
Jak widzisz, NIE wyświetlam danych od razu przy ich pobieraniu, ale dysponuję specjalnym obiektem klasy Template, do którego mogę wrzucać zmienne do wyświetlenia. W momencie wywołania display() obiekt załaduje szablon, wstawi do niego wszystkie dane i go wyświetli. W ten sposób masz oddzieloną logikę skryptu (pobieranie danych, ich obróbka) od procesu wyświetlania. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
18.10.2009, 11:04:41
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) |
Aha bo myslalem ze while trzeba umiescic w klasie zeby nie mieszac strukturalnego z obiektowym
-------------------- O! Zimniok :P
|
|
|
Wersja Lo-Fi | Aktualny czas: 5.06.2024 - 13:49 |