Piszę stronę/frameworka na zaliczenie i mam następujący dylemat.
Nie wiem jakie rozwiązanie projektowe najlepiej wybrać.
Problem mam taki, iż tworząc model NEWS nie wiem czy umieścić w nim takie pola jak np. komentarze(kolekcję modeli NEWS_COMMENT) czy też odzielić modele NEWS_COMMENT od modelu NEWS a następnie przesłać je do widoku?
Poniżej naszkicowany przykładowy problem:
class NEWS_CTRL{ //kontroler newsów public function get_news(){ $view = new NEWS_VIEW; $news_man = new NEWS_MODEL_MANAGER(); $news = $news_man->get_news($id); $view->news($news); } } class NEWS_MODEL{ //przykladowy MODEL NEWSA dane przekazywane przez settery i gettery private $id private $title; private $content; private $user; // zawiera model USER_MODEL private $comments; // zawiera kolekcje modeli NEWS_COMMENT_MODEL } class NEWS_MODEL_MANAGER{ public function create_news($dane){ $news = new NEWS_MODEL(); $news->id = $dane['id']; $news->title = $dane['title']; $news->content = $dane['content']; // stworzenie obiektu uzytkownika $user_man = USER_MODEL_MANAGER; $news->user = $user_man->create_user($dane['user']); $comment_man = NEWS_COMMENT_MODEL_MANAGER; //poniższa metoda zwraca NEWS_COMMENT_MODEL_COLLECTION w której znajdują się obiekty NEWS_COMMENT_MODEL $news->comments = $comment_man->get_comments($dane['id']); return $news; } public function get_news($id){ // tutaj nastepuje pobranie danych z bazy return $this->create_news($dane_z_bazy); } } class NEWS_VIEW(){ public function news(NEWS_MODEL $news){ // tutaj ladowanie wszystkiego do szablonu } }
Problem teraz polega na tym że komentarze mają swój szablon do wyświetlenia i nie wiem czy taka praktyka ładowania komentarzy newsów (nie chodzi tu tylko o te komentarze ale też o jakieś przyszłosciowe rozwiązania) do modelu NEWS_MODEL ma sens gdyż jeżeli będę chciał dołożyć jakiś moduł będę musiał zawszę zmieniać NEWS_MODEL aby coś dodać, a tego bym nie chciał.
Nie wiem czy może lepszym sposbem byłoby osobne pobranie newsa i komentarzy a następnie przeniesienie ich przez kontroler do widoku? np.
class NEWS_CTRL{ //kontroler newsów public function get_news(){ $view = new NEWS_VIEW; $news_man = new NEWS_MODEL_MANAGER(); $news = $news_man->get_news($id); $news_comment_manager = new NEWS_COMMENT_MODEL_MANAGER(); $comments = $news_comment_manager->get_comments($news->id); $view->news($news, $comments); } }
wtedy oczywiście atrybut $comments z NEWS_MODEL bym wywalił.
Byłbym wdzięczny za jakieś wskazówki, bo niestety mam mało czasu żeby oddać stronkę
