Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> kolejny temat w stylu "dobrze rozumuję?"
owi
post 7.10.2008, 01:39:16
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 2
Dołączył: 6.10.2008

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


Coś tam w swoim życiu w php napisałem. Dopóki koncentrowałem się na frontendzie to mi strukturalne programowanie wystarczało (strony dla malych firm nie wymagały bycia alfą i omegą z php). Teraz jednak chcialem się bardziej skoncentrować na php, ogarnąc troszke frameworki więc uznałem, że konieczne będzie poznanie OOP w php.

Przeczytałem pare kursów dziś i wczoraj.
Na razie to mam jeden wielki mętlik. W zasadzie coś juz tam tworze, ale najwazniejsze dla mnie jest zrozumienie logiki.

Czyli załóżmy yyyyy eeeeeee, że chce zrobić powiedzmy system newsowy.

To czy jezeli utworzę:

klasa: newsy
właściwosci :tytul,autor,data, tresc etc
metody: dodaj newsa, usun newsa, edytuj newsa, wyswietl newsa

to czy będzie to poprawne logicznie rozumowanie? Czy to będzie juz oop, czy może już o tej godzinie po takiej ilości tekstu i informacji pierniczę jak potłuczony?
Jak do takiej klasy dolaczyc komentarze? Czy utworzyc sobie analogicznie klasę komentarze z odpowiednimi polami i metodami ( w zasadzie identycznymi) czy jak?


edit:

Teraz jeszcze sobie tak wydumałem, że wyświetlanie newsa mogłoby być oddzielone od samej klasy.hm?

Ten post edytował owi 7.10.2008, 01:58:30


--------------------
eee yyy portfolio
Go to the top of the page
+Quote Post
LBO
post 7.10.2008, 08:05:47
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Tak, dobrze rozumujesz.

Radziłbym Tobie poszukać podobnych tematów - jest Ich mnóstwo - Sam pamiętam jeden gdzie sie szeroko o tym wypowiadałem.

Wyswietlanie powinno być oddzielone od samej klasy która trzyma dane. Jest to naturalne i bardzo wygodne podejście. Daje dużą elastyczność.

Jestem przeciwny takim smaczkom (odnosząc się do twojego przykładu) jak:

  1. <?php
  2. $news = new News(1); // pobieramy news o identyfikatorze id = 1
  3. $news->showAsHTML(); // blee
  4. ?>


lepiej wygląda jak klasa news nie jest tak wyspecjalizowana i zajmuje sie tylko zapisywaniem lub zwracaniem danych:

  1. //skrypt wyswietlający html
  2. <h2><?php print $news->getTitle(); ?></h2>
  3. <p><?php print $news->getBody(); ?></p>
  4. <span>autor: <?php print $news->getAuthor(); ?></span>


lub

  1. <?php
  2. //skrypt wyswietlający JSON
  3. $data = array(
  4. 'title' => $news->getTitle(),
  5. 'body' => $news->getBody(),
  6. 'author' => $news->getAuthor()
  7. )
  8. print json_encode($data);
  9. ?>


Oczywiście to jest uproszczony przykład, po bardziej skomplikowane rozwiązania zapraszam do zapoznania się z którymś z wiądących frameworków smile.gif Po to są.
Go to the top of the page
+Quote Post
owi
post 7.10.2008, 13:31:33
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 2
Dołączył: 6.10.2008

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


No rozumiem.

kwestia teraz tego zapisywania zwracania danych. Czy nie lepiej jest powierzyć obsługiwanie newsa klasie newsy, a samo zapisywanie (podobnie jak wyświetlanie) do bazy danych powierzyć jeszcze oddzielnej klasie?

Obiło mi się o uszy o propelu. czy to jest dobra biblioteka do obslugi baz dancyh w niewielkich projektach czy lepiej coś małego swojego stworzyć?

Przepraszam jezeli walkuje jakis temat n-ty raz. nie proszę o zrobienie czegoś za mnie. Proszę tylko o ukeirunkowanie. Reszty sam sie nauczę, bo o to przecież chodzi.


--------------------
eee yyy portfolio
Go to the top of the page
+Quote Post
LBO
post 7.10.2008, 14:13:58
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(owi @ 7.10.2008, 14:31:33 ) *
kwestia teraz tego zapisywania zwracania danych. Czy nie lepiej jest powierzyć obsługiwanie newsa klasie newsy, a samo zapisywanie (podobnie jak wyświetlanie) do bazy danych powierzyć jeszcze oddzielnej klasie?


A to zależy już tylko od ciebie - co kraj to obyczaj. Istnieja wzorce etc ale też i one zostawiaja pewną dowolność.

Cytat(owi @ 7.10.2008, 14:31:33 ) *
Obiło mi się o uszy o propelu. czy to jest dobra biblioteka do obslugi baz dancyh w niewielkich projektach czy lepiej coś małego swojego stworzyć?


Propel to świetny ORM - poznanie go na pewno zaowocuje w przyszłości.
Go to the top of the page
+Quote Post
plurr
post 9.10.2008, 20:48:24
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 12
Dołączył: 28.06.2007
Skąd: Bytom

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


Cytat(owi @ 7.10.2008, 14:31:33 ) *
kwestia teraz tego zapisywania zwracania danych. Czy nie lepiej jest powierzyć obsługiwanie newsa klasie newsy, a samo zapisywanie (podobnie jak wyświetlanie) do bazy danych powierzyć jeszcze oddzielnej klasie?


ogolnie to Twoja klasa powinna tylko 'wydawac' polecenia typu 'saveNews', a juz sam model powinien zajac sie wklepywaniem do bd - daje to pewna elastycznosc kodu, tak dziala wiekszosc frameworkow itp Wszystkie metody sety/gety na bazie napisz sobie w osobnej klasie.

Ten post edytował plurr 9.10.2008, 20:50:20


--------------------
Wyobraźnia bez wiedzy może stworzyć rzeczy piękne.
Wiedza bez wyobraźni najwyżej doskonałe.

Albert Einstein
Go to the top of the page
+Quote Post
f1xer
post 10.10.2008, 13:54:53
Post #6





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

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


generalnie newsy to przykład komponentu na który powinien składać się kontroler model i widok(i) poczytaj o MVC (masa na tym forum)


--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post
LBO
post 10.10.2008, 14:42:56
Post #7





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


@f1xer nie wszystko musi koniecznie być oparte o MVC - więc koledze nie mieszaj.

Po za tym jak na dłoni widać, że kolega robi model - nie wspomina nam w jaki sposób będzie to obsługiwać, bo to jest nieistotne - na tym poziomie ważne jest API a nie żróło danych (baza, webservice,...) czy wykorzystana biblioteka (PDO, Zend_Service,...).

Ten post edytował LBO 10.10.2008, 14:45:08
Go to the top of the page
+Quote Post
f1xer
post 10.10.2008, 14:53:24
Post #8





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

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


@LBO masz racje MVC to nie wszystko ale chyba przyznasz że warto w nim pisać. Poza tym sam napisałeś że lepiej żeby oddzielić wyświetlanie od danych więc mamy już tutaj MV brakuje tylko kontrolera. Tyle OT'a pozdrawiam


--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post
owi
post 10.10.2008, 14:59:46
Post #9





Grupa: Zarejestrowani
Postów: 48
Pomógł: 2
Dołączył: 6.10.2008

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


wrzucilem se symfony w wersji sanbox, potem zainstaluje peara bo z cli dziala mi symfony.bat, zas z symfoclipse cos sie pieprzy, pomimo iż rozpoznaje wszystko poprawnie.
Ale nie o to mi chodzi.

Wgralem symfony, żeby na własne oczy nauczyć się poprawnego budowania modelu MVC, nastepnie stworze coś swojego.
DZiekuje wszystkim za rady


--------------------
eee yyy portfolio
Go to the top of the page
+Quote Post
LBO
post 10.10.2008, 15:39:00
Post #10





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(owi @ 10.10.2008, 15:59:46 ) *
wrzucilem se symfony w wersji sanbox, potem zainstaluje peara bo z cli dziala mi symfony.bat, zas z symfoclipse cos sie pieprzy, pomimo iż rozpoznaje wszystko poprawnie.
Ale nie o to mi chodzi.

Wgralem symfony, żeby na własne oczy nauczyć się poprawnego budowania modelu MVC, nastepnie stworze coś swojego.
DZiekuje wszystkim za rady


Zmartwię ciebie, ale Symfony nie posiada poprawnego modelu.

ORM to nie jest model, nie możesz go bezboleśnie wymienić, bądź zupełnie zmienić źródła danych.
Go to the top of the page
+Quote Post
mike
post 10.10.2008, 16:31:55
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(LBO @ 10.10.2008, 16:39:00 ) *
ORM to nie jest model, nie możesz go bezboleśnie wymienić, bądź zupełnie zmienić źródła danych.
Oczywiście, że można.
Jeśli zapewnisz, że narzędzie, które wstawisz będzie miało ten sam interfejs to możesz sobie podmienić.

Pewnie byłoby to trudne ale da się. Jeżeli by Propela przykryć sfPropelFinderem to możesz przezroczyście dla aplikacji podmienić go na Doctrine'a. Co czyni warstwę modelu prawdziwie abstrakcyjną.
Go to the top of the page
+Quote Post
LBO
post 10.10.2008, 16:51:08
Post #12





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(mike @ 10.10.2008, 17:31:55 ) *
Oczywiście, że można.
Jeśli zapewnisz, że narzędzie, które wstawisz będzie miało ten sam interfejs to możesz sobie podmienić.


Ale jak nie przykrywasz to w tym względzie jesteś w głębokiej ***** i mam rację smile.gif

Cytat(mike @ 10.10.2008, 17:31:55 ) *
Pewnie byłoby to trudne ale da się. Jeżeli by Propela przykryć sfPropelFinderem to możesz przezroczyście dla aplikacji podmienić go na Doctrine'a. Co czyni warstwę modelu prawdziwie abstrakcyjną.


A ja wolę zwykły obiekt i się nie martwię interfejsem bibliotek których używam i Ich integracją, O! Autentycznie moge wybierać pomiędzy silnikami i bazami. Taki PHPowy POJO.
Jest to znacznie bardziej przenośne. Pamiętaj, że i tak każda abstrakcja jest prostsza od tej leżącej pod Nią (bardzo lubię to zdanie) i nic na to nie poradzisz.

Ten post edytował LBO 10.10.2008, 16:54:05
Go to the top of the page
+Quote Post
owi
post 10.10.2008, 16:58:00
Post #13





Grupa: Zarejestrowani
Postów: 48
Pomógł: 2
Dołączył: 6.10.2008

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


koledzy po polsku prosze ;D spokojnie - do takich rzeczy o ktorych tu opowiadacie to mam jeszcze duzo nauki. Jak na start ogarniecie samej obiektówki poprawnie plus symfony plus nowe narzedzie jakim jest eclipse da mi wrazen i roboty na dlugie tygodnie winksmiley.jpg


--------------------
eee yyy portfolio
Go to the top of the page
+Quote Post
Sedziwoj
post 11.10.2008, 20:44:50
Post #14





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

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


@owi
Na razie zignoruj ich dyskusję smile.gif

A co do warstwy modelu, to jednak byłbym za tym co pisze LBO, co prawda sam siedzę jak w Symfony na Propel, ale nie znaczy że to jest najlepsze wyjście. Po prostu można by było dać warstwę do której się odwołują akcje, a w tej warstwie dopiero było by tłumaczone to na Propel/Doctrine/PDO czy kto tam sobie życzy, dodać fabrykę do takiej warstwy i można się bawić zamieniając używać różnych ORM i nie tylko bez interwencji w kod akcji. Tylko to wymaga dodatkowego czasu interfejsów itd. więc pytanie czy warty jest ten dodatkowy wkład czasowy i obliczeniowy?


--------------------
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
LBO
post 20.10.2008, 08:39:24
Post #15





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


@Sedzowuj, opłaca się smile.gif Miałem wymuszoną okazję zmieniać Propela na czyste PDO w ten sposób. Bezbolesne.

edit:

A ja sie zastanawiam jak do ORMów, ARów, DAOów odnoszą się projekty informatyczne, które korzystają ze specyfikacji (diagramy UML). Bo załóżmy, że projektanci stworzyli zestawy klas i chyba źle by było je zignorować (piszę w kontekście MVC) i działać bezpośrednio na np. Propelu. Wydaje mi się, że właśnie wtedy tworzymy modele o których pisałem wcześniej. Trzymające i opisujące logikę biznesową niezależne od źródła danych.

Może ma ktoś doświadczenie w tym względzie?

Ten post edytował LBO 20.10.2008, 08:39:45
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: 25.06.2025 - 02:15