Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Poczuc OOP - zakladanie bazy firm
wojckr
post 6.05.2007, 13:33:44
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 6.05.2007
Skąd: Wrocław

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


Witam,
postaram się pisać zwięźle i na temat.
Dotychczas projektowalem proceduralnie. Zapoznalem sie z odstawiami i filozofia OOP. Jednak jeszcze tego nie "czuje".
Chcę stworzyć bazę firm przy użyciu OOP. Nie wiem czy dobrze mysle, ale obiektem bylaby firma, ktora mialaby swoja nazwe, adres,telefon itd.(własciwosci), a firme ta moznaby bylo dodawac, usuwac, edytowac i wyswietlac (metody).
Sprobowalem projektowac klase, ale zauwazylem, ze wrzucam funkcje do klasy i w zasadzie proceduralnie zrobilbym to chyba szybciej...

Czy mozecie podpowiedziec jako doswiadczeni w OOP, jak zabralibyscie sie do tworzenia takiej bazy firm z uzyciem OOP i czy do tego wystarczy jedna klasa czy wiecej niz jedna?

Dzieki wielkie z gory za wskazowki (mam wrazenie, ze potrzebuje kilku wskazowek, a potem pojdzie z gorki).
Go to the top of the page
+Quote Post
kicaj
post 6.05.2007, 14:00:53
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Wklej tutaj to co dotychczas zrobiles, podpowiemy co zmienic, poprawic, tak by bylo to OOP:)


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
dr_bonzo
post 6.05.2007, 14:39:05
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


1. skoro sie uczysz czegos nowego to bedziesz to robil N razy wolniej niz znana tobie metoda
2.uzyj jakiego frameworka, pozostanie ci tylko zamodelowanie dziedziny (danych o firmach) + kontrolery/html
3. opisz wiecej co chcesz zrobic, bo baza firm w najprostszej postaci to jedna klasa : Firma, a mozesz miec np. branże itd.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
wojckr
post 6.05.2007, 23:15:32
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 6.05.2007
Skąd: Wrocław

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


Dzięki za pierwsze wskazowki :-)

Za frameworki zabiore sie innym razem, na razie chce pojąć OOP, a N razy wolniejsze robienie to fakt, ale może zaprocentuje?

Wklejam _wstępny_szkielet_ klasy:

  1. <?
  2.  
  3. include '../53/mysqlconn.inc.php';
  4.  
  5. class firma {
  6. public $id;
  7. public $nazwa;
  8. public $adres;
  9. public $telefon;
  10.  
  11. function __construct() {
  12. $sql=mysql_query("SELECT * FROM firmy LIMIT 1 ;");
  13. if (mysql_num_rows($sql)>0) {
  14. $row=mysql_fetch_assoc($sql);
  15. $this->id = $row['id'];
  16. $this->nazwa = $row['nazwa'];
  17. $this->adres = $row['adres'];
  18. $this->telefon = $row['telefon'];
  19. } else {
  20. echo 'Brak firm.';
  21. }
  22. }
  23.  
  24. function dodajFirme() {
  25. //pomijam walidację (a moze powinno się już tearaz ją uwzględnić?)
  26. if (mysql_query("INSERT INTO firmy SET nazwa='".$this->nazwa."', adres='".$this->adres."', telefon='".$this->telefon."' ;")) {
  27. echo 'Dodano firme';
  28. } else {
  29. echo 'Nie dodano firmy';
  30. }
  31. }
  32.  
  33. function updateFirmy() {
  34. if (mysql_query("UPDATE firmy SET nazwa='".$this->nazwa."', adres='".$this->adres."', telefon='".$this->telefon."' WHERE id=".$this->id." ;")) {
  35. echo 'Uaktualniono firmę.';
  36. } else {
  37. echo 'Nie uaktualniono firmy.';
  38. }
  39. }
  40.  
  41. function usunFirme() {
  42. if (mysql_query("DELETE FROM firmy WHERE id=".$this->id." ;")) {
  43. echo 'Firma usunieta.';
  44. } else {
  45. echo 'Firma nie usunieta.';
  46. }
  47. }
  48.  
  49. function pokazFirme() {
  50. echo '<LI>Nazwa: '.$this->nazwa;
  51. echo '<LI>Adres: '.$this->adres;
  52. echo '<LI>Telefon: '.$this->telefon;
  53. }
  54.  
  55. function formFirma() {
  56. echo '<form action="" method="post">';
  57. echo '<input type="hidden" name="id" value="'.$this->id.'"><BR>';
  58. echo 'Nazwa: <input type="text" name="nazwa" value="'.$this->nazwa.'"><BR>';
  59. echo 'Adres: <input type="text" name="adres" value="'.$this->adres.'"><BR>';
  60. echo 'Telefon: <input type="text" name="telefon" value="'.$this->telefon.'"><BR>';
  61. echo '<input type="submit" value="dodaj" name="formFirma">';
  62. echo '<input type="submit" value="usun" name="formFirmaUsun">';
  63. echo '</form>';
  64. }
  65. }
  66.  
  67. $firmaA = new firma;
  68.  
  69. if (isset($_POST['formFirma']) and $_POST['id']=='') {
  70. $firmaA->nazwa=$_POST['nazwa'];
  71. $firmaA->adres=$_POST['adres'];
  72. $firmaA->telefon=$_POST['telefon'];
  73. $firmaA->dodajFirme();
  74. } elseif (isset($_POST['formFirma']) and $_POST['id']!='') {
  75. $fimraA->id=$_POST['id'];
  76. $firmaA->nazwa=$_POST['nazwa'];
  77. $firmaA->adres=$_POST['adres'];
  78. $firmaA->telefon=$_POST['telefon'];
  79. $firmaA->updateFirmy();
  80. } elseif (isset($_POST['formFirmaUsun']) and $_POST['id']!='') {
  81. $fimraA->id=$_POST['id'];
  82. $firmaA->usunFirme();
  83. } else {
  84. $firmaA->pokazFirme();
  85. $firmaA->formFirma();
  86. }
  87.  
  88.  
  89. ?>



Co do tego co chcę zrobić, to moje założenia:
1. Firmy podzielone na branze: branzaGlowna1 skladajaca sie z podBranzy1, podBranzy2 itd. (na razie dwa poziomy, ale potem bycmoze podbranze beda sie skaldac z podpodbranz), branzaGlowna2, 3, 4 itd.
2. Na stronie wyswietlają się branże główne i podbranże. Po kliknieciu na najniższy poziom (teraz podBranza, np. na podBranza3 branzyGlownej7) pokazuje sie lista firm z danej podbranzy.
3. Po kliknieciu na firme, pokazują się szczegolowe dane o firmie.
4. Teraz mozna edytować dane o tej firmie lub usunąć.
5. Po edycji/usunięciu w panelu administracyjnym zatwierdzam lub nie, ew. coś jeszcze poprawiam, jesli byla edycja. ALBO Jesli byla zalogowana uprawniona osoba, to wprowadzone zmiany od razu sa widoczne na stronie.

6. Jest też możliwość dodania firmy z dowolnego miejsca strony (czy uzytkownik jest na str glownej, czy w jakiejs branzy to moze z tego poziomu dodawac firme).


Oto co chcę zrobić. Zagadką dla mnie jest jakie korzyści osiągnę robiąc taką bazę firm w OOP ?
Go to the top of the page
+Quote Post
Hacker
post 7.05.2007, 08:08:30
Post #5





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


Dobrze by było jakby konstruktor pobierał id (__construct($id = 0)) i jak jest 0 to nie pobiera nic...
Początek klasy wygląda tak, jakbyś chciał dla każdej firmy tworzyć nowy obiekt (dobre podejście), ale potem... zrób zamiast dodajFirme i updateFirmy metodę save.
Pole $id powinno być private lub protected jak będziesz dziedziczył po tej klasie.
Echo w klasie nie wygląda zbyt ładnie... Może smarty? I pamiętaj przy tym, żeby nie klasa assignowała...
Patrząc na (X)HTML to najpierw piszesz <LI>, a potem <form>. Pisz wszystko małymi literami jak nowe standardy wymagają!

Ten post edytował Hacker 7.05.2007, 08:09:39


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
Go to the top of the page
+Quote Post
Sedziwoj
post 7.05.2007, 08:20:18
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Hacker @ 7.05.2007, 09:08:30 ) *
Pisz wszystko małymi literami jak nowe standardy wymagają!

Nowe standardy wymają małym, jak również zamykanie każdego taga, jak również umieszczenie w jakiejś konstrukcji a nie bezpośrednio po <form>... i pewnie parę innych rzeczy.

Co do użycia Smarty, to raczej MVC niż OOP, ale też bym sugerował zastosowanie MVC, bo kod staje się o wiele czytelniejszy.

Co do konstruktora, to jeśli nie zawsze mają być pobierane dane z bazy, to niech to nie będzie robione w konstruktorze.
Do tego nie tylko właściwości/atrybuty mają 'uprawnienia dostępu', ale również metody.
Nigdzie nie sprawdzasz, czy też nie inicjujesz połączenia z bazą. (i znów można by się czepić brak MVC...) ale również dane pobierane od użytkownika powinny być sprawdzane.

EDIT: lit.

Ten post edytował Sedziwoj 7.05.2007, 08:20:39


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Hacker
post 7.05.2007, 08:37:02
Post #7





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


@Sedziwoj nie czepiałem się już tak dokładnie (X)HTML-a, tylko zauważyłem to, że wojckr nie trzyma się konwencji raz pisze dużymi raz małymi...
Jakby nie miały być pobierane dane w konstruktorze to __get, __set lub/i gettery i settery (żeby wszyscy łącznie z mike_mechem byli zadowoleni tongue.gif)


---
tongue.gif
~mike_mech


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
Go to the top of the page
+Quote Post
Cysiaczek
post 10.05.2007, 08:52:46
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Zaprezentowałeś klasyczny przykład ujęcia kodu proceduralnego w klasie. Programowanie obiektowe to nie tylko klasy z kodem, ale przede wszystkim relacje pomiędzy obiektami. Obiekt firma może składać się z kilku obiektów, zwłaszcza a Twoim przykładzie, w którym wydzielasz funkcje zapisujące i odtwarzające dane z bazy.
Każda klasa powinna mieć ściśle wydzielone zadanie. Twoja tego nie ma, bo:
1. Obsługuje bazę danych
2. Wypisuje informacje dla użytkownika
3. Przechowuje informacje (o firmie)
4. Sama siebie kontroluje.

Widzę tu co najmniej 3 obiekty.

Również logika nieco szwankuje, bo jeśli za nią pójść, to obiekt Człowiek powinien mieć takie metody:
  1. <?php
  2. $człowiek= new Czlowiek('cysiaczek');
  3. $czlowiek->dodajCzlowiek('wojckr');
  4. $czlowiek->wypiszCzlowiek();// a może wypiszCzlowieki() ?
  5. ?>

Krótko mówiąc - nie ma to ani rąk, ani nóg.
Tu pomoże dobra książka na temat projektowania, do czego Cię zachęcam.

Małe propozycje:
1. Patrz na obiekty również pod kątem ich użytkowników (kodu, który je użytkuje)
2. Metody powinny zwracać wartości do użytkownika

Pozdrawiam. : )

P.S
Na pocieszenie napiszę, że jedna z moich klas o nazwie News dziedziczyła po obiekcie Pager, który odpowiadał za łamanie stron wyników tongue.gif


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
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: 13.06.2025 - 05:18