Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Własny mini wzór projektowy, Dla siebie
MateuszS
post 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
Go to the top of the page
+Quote Post
jmail
post 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 biggrin.gif"
2. Nie przesadzaj z try catch może czasami lepiej switchem albo ifem coś sprawdzić? snitch.gif
3. Zapraszam na PW - pokażę Ci jak to napisać winksmiley.jpg
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 biggrin.gif Im szybciej wykształcisz włąsne (oczywiście tylko dobre tongue.gif) nawyki tym lepiej. Ważne żebyś trzymał się cały czas jednej konwencji i nie skakał z kwiatka na kwiatek tongue.gif
Go to the top of the page
+Quote Post
wookieb
post 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 smile.gif
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ć.


--------------------
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post
cojack
post 16.10.2009, 22:17:48
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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".


  1. set_exception_handler()
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
Go to the top of the page
+Quote Post
wookieb
post 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




Cytat(cojack @ 16.10.2009, 23:17:48 ) *
gdybym miał drukarkę, wydrukowałbym sobie to i zamieścił w galerii "niedouki".

Udowodnij albo sprawdź.


Cytat
bezsens.
To synonim słowa "cojack" smile.gif
Co widzisz w tym złego chłopcze?


--------------------
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post
Zyx
post 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
Go to the top of the page
+Quote Post
MateuszS
post 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... tiredsmiley.gif


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Zyx
post 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
Go to the top of the page
+Quote Post
MateuszS
post 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
  1. while($wynik=mysql_fetch_assoc($query)) { // tu jakos musze je wszystkie wyswietlic $wynik['id'],$wynik['nick'] itd albo zwrocic za pomoca return


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
Go to the top of the page
+Quote Post
Zyx
post 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:

  1. $tpl = new Template('szablon.php');
  2.  
  3. $stmt = $pdo->query('SELECT ... FROM ...');
  4. $items = array();
  5. while($row = $stmt->fetch())
  6. {
  7. $items[] = $row;
  8. }
  9. $stmt->closeCursor();
  10.  
  11. $tpl->items = $items;
  12. $tpl->display();


A oto przykładowy szablon (szablon.php):

  1. <?php if(!empty($items)){ ?>
  2. <table>
  3. <?php foreach($items as $item){ ?>
  4. <tr>
  5. <td><?php echo $item['title']; ?></td>
  6. <td><?php echo $item['foo']; ?></td>
  7. </tr>
  8. <?php } ?>
  9. </table>
  10. <?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
Go to the top of the page
+Quote Post
MateuszS
post 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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.06.2024 - 13:49