Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MVC pjektowanie modelu
nocturne
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2011

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


Witam Korzystam z DOCTRINE 2 i CodeIgniter. Zastanawiam się jak prawidlowo zbudować modele do czegos takiego:

W bazie mam 4 tabele

Post = zawiera podstawowe informacjie o poscie
Post_settings = dodatkowe wartosci dla posta
categorie = kategori do ktorej zostanie dowiazany psot
category_has_post = tablica laczaca

Żeby korzystać z doctrinie stworzylem modele ktore odzwierciedlaja wyglad mojej bazy.

Jak ma wygladac model ktory będzie doawał i edytował wpis ?

myslalem nad czyms takim:

  1. class wpis
  2. {
  3. private post; // obiekt kalsy Post
  4. privare post_settings; // tablica obiektow post_settings
  5. private categorie_dostepne; // tablica obiektow categorie
  6. private categorie_zaznaczone; // tablica obiektow categorie
  7.  
  8.  
  9. funkcja add(){} //dodawanie rekordow do TABLE category_has_post ,categorie ,Post_settings ,Post poprzez wywolanie odpowiednich regol z tych klas
  10. funkcja edit(){} // edycja wpisu
  11. funkcja get(){} //pobranie wpisu
  12.  
  13. }




Mam jeszcze 2 pytanie, wyslalem formularz z tym wpisem chcem teraz dokanac walidacjitablicy $_POST gdzie to powino sie robic ? w Mdelu wpis czy moze mam utworzyć biblioteke którą będzie wywolywal kontrooler gdzie będzie walidowała i obrabiała $_POSTA np striptags, trim, strtoupper , empty,in_number ?

Go to the top of the page
+Quote Post
toffiak
post
Post #2





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


Napisałeś że korzystasz z Doctrine 2, ale u Ciebie tego nie widać, 4 tabele to 4 powinny być 4 encje z odpowiednimi powiązaniami. Mając powiązanie nie potrzebujesz żadnych metod get()/add().

Dodając nowy rekord tworzysz tylko nowy obiekt encji "persistujesz" go i zrzucasz menadżer encji.
Podobnie działa edycja: pobierasz encję zmieniasz jej właściwości i także zrzucasz.

Walidacją encji nie powinna zajmować się sama encja, do tego służą walidatory.
Go to the top of the page
+Quote Post
nocturne
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2011

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


Ja wiem ze nie potrzebuje takich funkcji działając na obiektach klas Post, Post_settings, categorie, category_has_post . Moje pytanie brzmi czy te klasy zamykać w osobnej klasie WPIS która będzie reprezentowała konkretny wpis na stronie. Do widoku przeslac obiekt Wpis
  1. $wpis // obiekt klasy wpis posiadający obiekty klas Post, Post_settings, categorie, category_has_post

czy :
  1. $post; // obiekt kalsy Post
  2. $array_post_settings; // tablica obiektow post_settings
  3. $array_categorie_dostepne; // tablica obiektow categorie
  4. $array_categorie_zaznaczone; // tablica obiektow categorie
Go to the top of the page
+Quote Post
toffiak
post
Post #4





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


A może zamiast klasy Wpis/Wpisy wystarczy sama klasa Post, obiekty klasy Post poprzez relacje będą posiadały ustawienia (PostSettings) oraz kategorię do jakiej należy dany post.
I do widoku wystarczy przekazać sam obiekt post i w zależności od wymagać pobierać, lub nie, inne dane (kategorie, ustawienia itd...).
Go to the top of the page
+Quote Post
nocturne
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2011

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


Na poczaku założyłem ze ORM-a bede używłtylko do edycji/dodawania/kasowania bo nie chcialem korzystać OMR-a do selectow i joinow tylko PDO albo DBAL-a ale teraz zastanawiam sie czy nie lepiej korzystać z ORM-a bo tam bede mail to tak jak chce. Zakładając ze jednak nie skorzystam z tych relacji i bede chciał zaprojektować własną klasę Wpis z wszystkimi ustawieniami to tak miałaby onawygladać czy cośinaczej powinno wygladac ?
Go to the top of the page
+Quote Post
toffiak
post
Post #6





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


Jeżeli już nie chcesz korzystać z relacji Doctrine 2, to i tak proponowałbym klasę Post jako tą która zawiera listę/tabele kategorię i właściwości samego posta (PostSettings), jest to bardziej naturalne.

Sama klasa Wpis jest właściwie niepotrzebna, za co ona odpowiada ?, chyba że miała by być menadżerem i odpowiadała za zarządzanie postami: coś w rodzaju findOneBy($id), find($id).
Tylko że to posiada Doctrine 2 i działa to niemal automatycznie.

Skoro więc "zaprzągłeś" do pracy ORM-a to wykorzystaj go w pełni.
Go to the top of the page
+Quote Post
nocturne
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2011

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


Założenie początkowe było toakie żeby w niej było wszystko przechowywane co jest mi potrzebne do Dodania/Usunięcia,Edycji i wyświetlenie 1 Wpisu. W Przypadku dodawania miała ustawiać jeden Obiekt klasy Post, obiekty Post_settings i category_has_post za pomoca danych z formularza $_POST ale rozumiem ze to mam zrobic wszystko w klasie Post tak ?
Go to the top of the page
+Quote Post
toffiak
post
Post #8





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


Podsumowując:

Klasa Post posiada właściwości PostSettings oraz Category, obiekty tej klasy same się nie zapisują.
Do tego służy właśnie menadżer w twoim przypadku Klasa Wpis, choć ja bym ją nazwał inaczej (PostTable z sf 1.4 lub PostRepository sf 2, aby podkreślić że operuje on tylko na Postach).

Gdy otrzymujesz dane postem tworzysz nowy obiekt klasy Post, walidujesz go i wypełniasz go przesłanymi danymi. W tym momencie wkracza menadżer i to on zapisuje obiekt do bazy, lub gdziekolwiek indziej.


Go to the top of the page
+Quote Post
nocturne
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2011

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


Trochę się pogłębiłem. Co proponujesz ? Mam zamykać te Encjie w jakąś jeszcze klase ? czy korzystać tylko z Posta i gdzie mam ustawić obikety np post_settings i je zapisać korzystając z doctrine persist , flush Robic klase która to będzie wszystko robiłą jak poroponowałem np WPIS czy moze to wszystko ma być w klasie Post która ma relacjie do innych obiektów
Go to the top of the page
+Quote Post

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: 25.08.2025 - 22:25