Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Projektowanie strony www.
Forum PHP.pl > Forum > PHP > Object-oriented programming
Ziem
Witam!
Jakiś czas temu wpadł mi do głowy pomysł aby stworzyć stronę www, na której użytkownicy będą zdobywać punkty, a potem kupować za nie różne przedmioty w sklepiku. Zacząłem prace, wszystko pisałem proceduralne i jakoś to szło, do czasu... Gdy kod się rozbudował ciężko było cokolwiek zmodyfikować(np. http://wklejaj.pl/8j2dt ). Ta sytuacja skłoniła mnie do zagłębienia się w programowanie obiektowe. Przeczytałem parę artykułów, itp. i zdobyłem podstawowe informacje o programowaniu obiektowym.

Tutaj jest przykład klas, które stworzyłem:
http://wklejaj.pl/05ngc
http://wklejaj.pl/m8iqa

Na razie skromnie to wygląda, jeszcze nie do końca rozumiem to zagadnienie, muszę poćwiczyć.

Mam problem, bo nie wiem jak rozplanować taką stronę. Nie do końca wiem co ma być klasą, a co nie, ile ma ich być i jak je podzielić...
Szukam jakiegoś schematu jak to wszystko rozplanować. Jak myślicie z czego można skorzystać przy tworzeniu tej strony?

Do tej pory miałem jeden plik z wszystkimi funkcjami i wywoływałem je w określonych podstronach. Teraz trzeba to rozdzielić jakoś na klasy i tutaj mam problem. Mogę stworzyć np. jedną klasę User odpowiedzialną za logowanie i dalszą współpracę z użytkownikiem (wyświetlanie, zmienianie danych, itp.) ale czy np. dla funkcji ,,zapomniałem hasła" też pasowałoby zrobić klasę?
Na swojej stronie przewiduję mieć: rejestrację, logowanie na sesjach, zapomniałem hasła, aktywację użytkowników przez maila, captchę, newsy, sklepik, logi(np. kiedy ktoś i z jakiego IP próbował się logować na konto danego użytkownika), itp.

Prosiłbym o jakieś sugestie.
Pozdrawiam!
empathon
Przede wszystkim programowanie proceduralne wcale nie jest winne nieczytelności Twojego kodu ale to jak programujesz. Da się programować proceduralnie i mieć porządek. Oczywiście dzięki obiektówce jest to bardziej naturalne i niejako wymusza pewną separację (choć niektórzy uparcie temu przeczą tongue.gif).

To o co pytasz to wzorce projektowe (Design pattern). Ten który będzie Cię szczególnie interesował to MVC. Na wortalu są artykuły które mogą stanowić dla Ciebie niezłą bazę.
Powodzenia!
sf
Chyba każdy kto zaczynał poznawać MVC starał się przeglądać frameworki, które są na rynku. Zobacz jak to wygląda u innych, a może zaczniesz od używania gotowych struktur i znich będziesz budował aplikacje? Gdy już poznasz 2-3 takie sytemy na pewno łatwiej będzie coś tworzyć własnego.. o ile wyda Ci się to konieczne. Zauważ, że w wielu firmach korzystają z gotowych frameworków dostępnych za rynku.
Ziem
Dzięki za odpowiedź!

Cytat(empathon @ 30.10.2008, 11:30:15 ) *
Przede wszystkim programowanie proceduralne wcale nie jest winne nieczytelności Twojego kodu ale to jak programujesz. Da się programować proceduralnie i mieć porządek. Oczywiście dzięki obiektówce jest to bardziej naturalne i niejako wymusza pewną separację (choć niektórzy uparcie temu przeczą tongue.gif ).

To o co pytasz to wzorce projektowe (Design pattern). Ten który będzie Cię szczególnie interesował to MVC. Na wortalu są artykuły które mogą stanowić dla Ciebie niezłą bazę.
Powodzenia!

Co do programowania proceduralnego masz rację. Wiem, że mój kod = chaos, mimo że starałem się to jakoś poukładać smile.gif. Dzięki za nakierowanie ma MVC, coś z tym pokombinuję.

Cytat(sf @ 30.10.2008, 13:40:59 ) *
Chyba każdy kto zaczynał poznawać MVC starał się przeglądać frameworki, które są na rynku. Zobacz jak to wygląda u innych, a może zaczniesz od używania gotowych struktur i znich będziesz budował aplikacje? Gdy już poznasz 2-3 takie sytemy na pewno łatwiej będzie coś tworzyć własnego.. o ile wyda Ci się to konieczne. Zauważ, że w wielu firmach korzystają z gotowych frameworków dostępnych za rynku.

Dzięki za radę. Trochę już u nich co nieco podpatrzyłem i coś się już w głowie klaruje. Na pewno korzystanie z gotowych to oszczędność czasu i wysiłku ale zagłębienie się w programowaniu obiektowym to pójście do przodu i zdobycie nowych doświadczeń.

Na razie zabieram się za czytanie i naukę, jeśli coś wykombinuję na pewno tu wrócę.
Pozdrawiam!
markac
Nie ma to jak wciskanie frameworka i wzorca MVC osobie, która wyraźnie napisała, że dopiero zaczyna przygodę z OOP... Mało tego, padł nawet pomysł napisania go od podstaw! W jakim celu pytam? Zamiast pisać 30-ty framework może warto dołączyć się do jakiegoś projektu, jeśli widzimy, że są w nim rzeczy, które możemy poprawić?
Wracając do tematu. W Twoim przypadku problem polega na tym, że trzymasz kod html i php w jednym pliku. Spróbuj rozdzielić warstwę logiki biznesowej od warstwy prezentacji. Mimo, że już wyrosłem ze Smarty, to polecam Ci go do tworzenia szablonów. Unikniesz w ten sposób mieszania tych warstw. Staraj się używać najprostszych operacji wyświetlania danych itp. wzbraniając się przed ich modyfikacją (nie mylić z formatowaniem), bo z prostego szablonu można zrobić kolejny plik z kodem, a w Smarty jest to niestety możliwe.
Programowania OOP nie unikniesz. Wszelkie biblioteki jak np. Smarty są udostępniane jako klasy.
W przyszłości możesz poczytać o architekturze Model 2 (zmodyfikowany MVC na potrzeby www) i zacząć używać gotowych rozwiązań. Na początek możesz poczytać o CakePHP, Code Igniter, Kohana. Potem możesz nauczyć się modelowania w UML, wzorcach projektowych, ale nie popadaj w zachwyt jak większość tu smile.gif
chlebik
Skad to uwielbienie dla Smartow to nie mam pojecia. Rzecz archaiczna, pisana w PHP 4 i baaaaardzo wolna. Po co stosowac polowiczne rozwiazania? Jakos nie widze obecnie w ogloszeniach o pracy potrzeby znajomosci Smarty czy innego systemu szablonow, za to frameworkow chce kazdy. Dlaczego? Ano bo raz, ze wymuszaja porzadek, dwa, ze sa obecnie uzywane powszechnie do tworzenia aplikacji.

Jesli kolega zaczyna dopiero przygode z OOP niech wezmie sobie wlasnie od razu jakis framework (najlepiej Symphony bo ma maaaaaase tutoriali/przykladow na sieci) i tam sie wszystkiego wyuczyc. I niech nikt nie mowi, ze to trudne, ja sie uczylem OOP na Zend Framework w wersji 1.0.1 bodajze i jakos wyszlo mi to na dobre.
Ziem
Jestem jak najbardziej początkującym, znam jakieś tam podstawy. Obiektowego PHP chcę się nauczyć, żeby potem w miarę sprawnie pisać aplikacje www. Na razie chciałem skrobnąć w miarę nieskomplikowany kod uwzględniający dane z pierwszego postu. Mam już część gotowych funkcji i teraz pasowałoby to sensownie poukładać w klasy. Ostatnio trochę z tym kombinuję. Co do tych wszystkich Smartów, itd. to myślałem nad stworzeniem osobnej klasy zajmującej się prezentacją danych.

Cytat(chlebik)
framework (najlepiej Symphony bo ma maaaaaase tutoriali/przykladow na sieci) i tam sie wszystkiego wyuczyc.

Masz na myśli podglądanie jak to robią profesjonaliści?

Pozdrawiam!
ayeo
Cytat
Mam już część gotowych funkcji i teraz pasowałoby to sensownie poukładać w klasy.


To nie tak smile.gif Klasa/obiekt to nie pojemnik na funkcje! Możesz sobie zrobić klasy powkładać do nich swoje gotowe metody, ale to nie będzie miało nic wspólnego z OOP. Najszybciej chyba zauważysz różnice i zalety (a także wady) jak napiszesz coś w OOP. Wydaje mi się, że takim w miarę prostym, a zarazem mającym praktyczne zasotosowanie tematem będzie warstwa abstrakcji dla bazy danych. Znajdziesz w sieci masę artykułów na ten temat. Powinieneś zrozumieć różnicę między kodem strukturalnym, a obiektowym, a także docenić łatwość użycia tego kody i łatwość jego modyfikacji. Jakieś przykłady, że piesek dziedziczy po ssakach są IMHO bezsensu i nie dają, żadnej praktycznej wiedzy. Moja rada: napisz sobie klasę obsługującą bazę danych. Najprostszą na świecie, z kilkoma metodami: select, update, insert, delete i tyle. Na bank załapiesz o co chodzi winksmiley.jpg

Pozdrawiam!
Ziem
Cytat(ayeo @ 10.11.2008, 21:14:44 ) *
To nie tak smile.gif Klasa/obiekt to nie pojemnik na funkcje! Możesz sobie zrobić klasy powkładać do nich swoje gotowe metody, ale to nie będzie miało nic wspólnego z OOP. Najszybciej chyba zauważysz różnice i zalety (a także wady) jak napiszesz coś w OOP. Wydaje mi się, że takim w miarę prostym, a zarazem mającym praktyczne zasotosowanie tematem będzie warstwa abstrakcji dla bazy danych. Znajdziesz w sieci masę artykułów na ten temat. Powinieneś zrozumieć różnicę między kodem strukturalnym, a obiektowym, a także docenić łatwość użycia tego kody i łatwość jego modyfikacji. Jakieś przykłady, że piesek dziedziczy po ssakach są IMHO bezsensu i nie dają, żadnej praktycznej wiedzy. Moja rada: napisz sobie klasę obsługującą bazę danych. Najprostszą na świecie, z kilkoma metodami: select, update, insert, delete i tyle. Na bank załapiesz o co chodzi winksmiley.jpg

Pozdrawiam!

Czy tak na bank załapie to nie wiem...
Wykombinowałem coś takiego: http://wklejaj.pl/dxvl2 (wcześniej zrobiłem: http://wklejaj.pl/05ngc )? Reszty nie kończyłem bo nie wiem czy o to chodzi.

Pod jakim hasłem mam szukać tych artykułów?
ayeo
Witaj!

Taka mała uwaga smile.gif Konstruktor powinien się łączyć z bazą i zapisywać uchwyt połączenia do właściwości prywatnej.

Pozdrawiam!
Ziem
Ok, to już załatwiłem. A reszta?

Co z "die ..", mam tego używać w tej klasie?

Pozdrawiam!
markac
Cytat(Ziem @ 11.11.2008, 17:02:52 ) *
Ok, to już załatwiłem. A reszta?

Co z "die ..", mam tego używać w tej klasie?

Pozdrawiam!


Nie. Masz używać throw zamiast die(), czyli:

  1. <?php
  2. throw new Exception("Błąd połączenia: " . mysql_error($mysql_connection));
  3. ?>


A potem:

  1. <?php
  2. try {
  3.  $test->DBConnect();
  4. } catch (Exception $e) {
  5.  echo $e->getMessage();
  6. }
  7. ?>

W ogóle to radzę skorzystać z dostępnej w PHP klasy PDO, zamiast tworzyć swoją smile.gif
O wyjątkach: http://pl2.php.net/exceptions
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.