Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Data Objects i Data Access Objects
become
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 12.01.2007

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


Witam. Chciałbym trochę rozwinąć myśl NoiseMC. Bo Twoje podejście mnie lekko zaintrygowało.

Rozumiem że wynika ono z modelu MVC ?

Mam pytanie odnośnie tego co napisłeś.
Jak skorelowac ze sobą konkretny obiekt Model i nie-Model ?
Chodzi mi o to, że jeżeli utworzę dwie klasy to bede mial 2 obiekty. Jezeli Data Object ma przechowywać tylko dane, to rozumiem, że nie powinien on mieć wogóle metod manipulującymi danymi ? Nawet gettery ?

Załużmy taką sytuację.
pobieram z bazy Artykul. Chcialbym zmienic mu opis i zrobic update danych na bazie.
Czy dobrze rozumiem, ze klasa Data Access Objects zajmuje sie pobieraniem danych i zwracaniem obiektu a po poprawieniu przekazuje obiekt to Data Access Objects i go zapisuje ?
Chyba ze umiescic go w klasie model na stale. No nie wiem.

Np. Mam taką klase

  1. <?php
  2. class ArticleInfo() {
  3.  
  4.  var $id;
  5.  var $title;
  6.  var $info;
  7.  var $oAuthor;
  8.  
  9.  function __construct ($id=null, $title=null, $info=null, Author $author=null) {
  10. $this->id=$id;
  11. $this->title=$title;
  12. $this->info=$info;
  13. $this->oAuthor=$author;
  14.  }
  15.  
  16.  function getTitle() {
  17. return $this->title;
  18.  }
  19. }
  20.  
  21.  
  22. class ArticleInfo_Model($oDB) {
  23.  
  24.  var $oDB;
  25.  
  26.  function getArticleInfoById($id) {
  27.  $sQ="SELECT *
  28.  FROM articles
  29.  WHERE id_article=?";
  30.  
  31. $aArticle=$this->$oDB->getRow($sQ, array($id));
  32.  
  33. if (!is_null($aArticle) {
  34.  $modelAuthor=new Author_Model($this->oDB);
  35.  $oAuthor=$modelAuthor->getAuthor($aArticle['authorid');
  36.  return new ArticleInfo($id, $aArticle['title'], $aArticle['info'], $oAuthor);
  37. }
  38.  }
  39. }
  40.  
  41. class Author() {
  42.  
  43.  var $id;
  44.  var $firstname;
  45.  var $lastname;
  46.  var $email;
  47.  var $login;
  48.  var $password;
  49.  
  50.  function __construct($id=null, $firstname=null, $lastname=null, $email=null, $login=null, $password=null) {
  51. $this->id=$id;
  52. $this->firstname=$firstname;
  53. $this->lastname=$lastname;
  54. $this->email=$email;
  55. $this->login=$login;
  56. $this->password=$password;
  57.  }
  58.  
  59.  function getId() {
  60. return $this->id;
  61.  }
  62.  
  63.  function getFirstName() {
  64. return $this->firstname;
  65.  }
  66.  
  67.  
  68. }
  69.  
  70. class Author_Model($oDB) {
  71.  
  72.  var $oDB;
  73.  
  74.  function getAuthor($id) {
  75.  
  76. $sQ="
  77. SELECT * FROM author WHERE id_author=?
  78. ";
  79.  
  80. $aAuthor=$this->$oDB->getRow($sQ, array($id));
  81.  
  82. if (!is_null($aAuthor) {
  83.  return new Author($id, $aAuthor['firstname'], $aAuthor['lastname'], $aAuthor['email'], $aAuthor['login'], $aAuthor['password']);
  84. }
  85.  }
  86. }
  87. ?>


i teraz wykorzystanie

  1. <?php
  2. $oDB=new DB();
  3.  $oDB->connect(DSN);
  4.  
  5.  $html=new Smarty();
  6.  
  7.  $modelArticleInfo=new ArticleInfo_Model($oDB);
  8.  $oArticleInfo=$modelArticleInfo->getArticleInfoById(34);
  9.  
  10.  $html->assign("article",$oArticleInfo);
  11. ?>


W ten sposób wyciągam dane konkretnego artykułu (po jego ID).
I co o tym myslicie ? Czy to jest prawidłowo ?

Czy moglbym stworzyc np.
klasę Articles_Model, ktora zawieralalby metody zwracajace:
1. obiekt ArtykulInfo (class ArticleInfo)
2. obiekt Artykul (class Article)
3. lista info artykulow danej kategorii -> tablica obiektow class ArticleInfo

Ten post edytował become 30.11.2007, 12:44:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
become
post
Post #2





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 12.01.2007

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


wiesz co. lekko skumałem o co ci chodzi w takim podejsciu.
niemniej ja zakladam, ze system, ktory pisze bedzie oparty o baze mysql i nie przewiduje trzymania danych np. w plikach xml.

Natomiast jest to dosc ciekawe. Np. mozna zastosowac ten mechanizm podczas tworzenia np. jakiegos prostego CMS'a,
ktory bedzie umozliwial zapisywanie danych wg. wyboru (pliki proste, baza mysql, itd).

To nad czym teraz pracuje to serwis ala interia360.pl (no na pwno nie ta skala).
Generalnie jest
1. Uzytkownik (czytelnik, autor)
2. Kategoria i podkategoria
3. Artykul
4. Wstep artykulu (lista takich wstepow jest generowana dla kazdej kategorii i podkategorii)
5. Lista komentarzy artykulu.
6. komentarz.


Kazdy artykul mozna ocenic po zalogowaniu 1 raz. Kazdy artykul ma zliczana ilosc czytań.

Zaczalem pisac proceduralnie i mialem juz troche kodu naklepane ale stwierdzilem, ze jednak lepiej w koncu nauczyc sie OOP.
Mysle ze dziedzina serwisu doskonale sie do tego nadaje.

Niemniej interfejsy i abstakcje to jeszcze dla mnie za wysoko.

Bo widzisz, to co zaproponował mi NoiseMC powoduje ze mam wiele pytań. To co proponujesz Ty to juz straszna abstakcja za którą niemniej jestem bardzo wdzięczny, bo naprawde nie domyslalem sie ze mozna to tak zorganizowac. Jest to bardzo logiczne i pewnie z czasem doszedlbym do tego. Ale po co sie domyslac jak mozna sie zapytac. Splatch - twoj blog dodalem do ulubionych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pytań miałbym bardzo, bardzo duzo ale jednak chcialbym juz zaczac to pisac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował become 30.11.2007, 16:15:09
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 15:06