Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Projektowanie strony www.
Ziem
post 29.10.2008, 18:34:20
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
empathon
post 30.10.2008, 11:30:15
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

Ostrzeżenie: (0%)
-----


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!


--------------------
Goldenline: Łukasz Rodziewicz
Go to the top of the page
+Quote Post
sf
post 30.10.2008, 13:40:59
Post #3





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


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.

Ten post edytował sf 30.10.2008, 13:42:11


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
Ziem
post 1.11.2008, 19:37:41
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
markac
post 9.11.2008, 00:31:41
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

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


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
Go to the top of the page
+Quote Post
chlebik
post 10.11.2008, 10:58:20
Post #6





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
"Człowiek dążący do swego celu może być skuteczny tylko w przypadku, jeśli każdą minutę swego życia wykorzysta z maksymalną korzyścią dla osiągnięcia zaplanowanego celu. Jeśli stworzył dla siebie system kar i karze sam siebie za każdą zmarnowaną minutę. Człowiekowi w zupełności wystarczą 3-4 godziny snu, cały pozostały czas może być wykorzystany dla osiągnięcia upragnionego celu." -- Wiktor Suworow
Java devBlog
KulturalnyChlebik
Go to the top of the page
+Quote Post
Ziem
post 10.11.2008, 20:55:49
Post #7





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
ayeo
post 10.11.2008, 21:14:44
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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!


--------------------
Go to the top of the page
+Quote Post
Ziem
post 11.11.2008, 16:27:46
Post #9





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Ziem 11.11.2008, 16:28:12
Go to the top of the page
+Quote Post
ayeo
post 11.11.2008, 16:34:51
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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!


--------------------
Go to the top of the page
+Quote Post
Ziem
post 11.11.2008, 17:02:52
Post #11





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


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

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

Pozdrawiam!
Go to the top of the page
+Quote Post
markac
post 11.11.2008, 22:27:25
Post #12





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

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


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

Ten post edytował markac 11.11.2008, 22:28:04
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: 30.06.2025 - 08:11