znowu MVC ;/ |
znowu MVC ;/ |
28.06.2007, 08:31:13
Post
#1
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
trochę mam wyrzuty że wałkuję znowu biedne MVC bo z tego co widziałem było nieraz, przeczytałem kilka artykułów również na wortal.php.pl, masę postów na temat tej architektury, przejrzałem kod przykładowego rozwiązania: http://www.phppatterns.com/docs/design/mvc_pattern_version_2
jednak żadne z powyższych nie tłumaczą mi mojego problemu zastanawiam się nad: 1. jak wykonujecie zapytanie gdy potrzebujecie złączenia 2 tabel, robicie to złączenie czy wewnątrz klasy np. artykuł tworzycie obiekt klasy np. Autor i nim wykonujecie kolejne zapytanie? 2. jeśli robicie to złączenie to jak dane składujecie w obiekcie czy macie atrybut autor w którym znajduję się jego ksywa? czy w tym atrybucie znajduję się obiekt może to głupie pytanie ale jakoś nie mogę tego pojąć, ani znaleźć nigdzie odpowiedzi ;/ |
|
|
28.06.2007, 11:03:56
Post
#2
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
To nie jest śmieszne wzorce projektowe też dla mnie były niezrozumiałe przez dosyć długi czas. Przede wszystkim przez bezsensowne ich wytłumaczenie. Generalnie chodzi o to że dzielisz zadania w klasie na:
Metodę pobierającą i przetwarzającą dane, metodę wyświetlająca przykładowo tworzącą obiekt Smarty i metodę kontrolująca która jest wywoływana przez funkcję lub klasę która steruje całą stroną - pobiera url i wykonuje określone akcje. Ja dane składuję w tablicach wielowymiarowych bo tak łatwiej jest ich użyć. Nie rozumiem trochę z tym złączeniem, ale jeśli należy pobrać dane z dwóch tabel to robię to w jednym zapytaniu. |
|
|
28.06.2007, 13:16:37
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) |
Cytat 1. jak wykonujecie zapytanie gdy potrzebujecie złączenia 2 tabel, robicie to złączenie czy wewnątrz klasy np. artykuł tworzycie obiekt klasy np. Autor i nim wykonujecie kolejne zapytanie? 2. jeśli robicie to złączenie to jak dane składujecie w obiekcie czy macie atrybut autor w którym znajduję się jego ksywa? czy w tym atrybucie znajduję się obiekt Za pobierranie danych odpowiedzialny jest model. Przykładowo NewsContainer który jest kontenerem z newsami. Posiada metody np. getAll(), getById(), getOne(), i w środu tych metod możesz zrobić co chcesz, zwracasz tablicę z danymi, a później inna warstwa się tym zajmuje -------------------- |
|
|
1.07.2007, 11:46:22
Post
#4
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
no tak działanie MVC już kojarzę chyba: zasadniczo kontroler kontroluję :P, model wybiera sobie dane i widok "oprawia" dane w HTML no albo do innego formatu... zależnie od potrzeb, jednak nie o to chodzi
no i jeszcze względnie FrontController zajmuje się przetwarzaniem zapytania... no dobra to postaram się teraz konkretniej... Struktura bazy prosta: Uzytkownik id | ksywa News id | tytul | tresc | autor | data i dorzućmy jeszcze Galeria id | tytul_zdjecia | opis | dodal złączenia na News.autor=Uzytkownik.id i Galeria.dodal=Uzytkownik.id to chyba oczywiste no i teraz dumamy nad przyjętą architekturą... obiektówka + MVC + DRY, to chyba rozsądne nieprawdaż? zrobimy sobie zapytanie w np. getOne w modelu Newsa
potem w getOne w modelu Galerii zapytanie staje się całkiem podobne stąd już pewien problem IMO z DRY... dlatego się zastanawiałem czy bardziej sensowne nie będzie zrzucenie wyboru zapytania odnośnie autora na model Uzytkownika ale to by stworzyło dużo niepotrzebnych zapytań, dlatego ni jedno, ni drugie rozwiązanie nie podoba mi się i myślałem że jest jakiś inny sposób... jest? bądź co bądź wg takich obiektowych założeń wyciągnięcie ksywy autora nie jest w gestii modelu Newsa ani Galerii, nieprawdaż? czy może się mylę? Cytat Ja dane składuję w tablicach wielowymiarowych hmmm no ja stwierdziłem że do tego są obiekty i jego atrybuty..., ale jeszcze zobaczę jak mi to wyjdzie wszystko w każdym razie wielowymiarowość tej tablicy polega na tym że "zamieszczasz w nim" obiekt innej klasy czyli dla naszego przykładu masz tablicę:
czy po prostu na tym, że masz dane zgromadzone w wielowymiarowej tablicy bo takie były potrzeby skryptu? jeśli to pierwsze, to wg mnie ta architektura jest w sumie bałaganem już, bo gdybyśmy chcieli dorzucić oprócz autora jeszcze kilka złączeń do tabel które obsługują oddzielne modele, to tym sposobem przeciążamy nasz model Newsa i tworzymy klasę boską... co AFAIR jest błędem no ale w sumie się nie znam dlatego przecież pytam dobrze mówię czy źle? PS. mam nadzieje, że jaśniej sformułowałem swoje wątpliwości... może jednak ktoś się zlituję..., chciałbym jednak znaleźć odpowiedź na moje pytanie Ten post edytował zimi 28.06.2007, 23:35:16 |
|
|
1.07.2007, 11:54:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
Ja mam w modelu nowości coś takiego.
|
|
|
1.07.2007, 12:00:05
Post
#6
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
no dobra ale nie masz tu złączenia... tego autora np. o którego teraz mi chodzi
|
|
|
1.07.2007, 12:29:37
Post
#7
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
Jeżeli byłby autor to nie robiłbym w tablicy wielowymiarowej kolejnego elementu będącego tablicą.
było by to tak: Edit> Po co robić wielowymiarowo-wielowymiarowej tablicy ? Ten post edytował orglee 1.07.2007, 12:31:39 |
|
|
25.03.2009, 20:25:39
Post
#8
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.06.2008 Ostrzeżenie: (0%) |
Czytam i czytam artykuły o MVC no i mam pewny dylemat i pytania.. Robię prosty projekt i chciałbym użyć właśnie MVC. Strona będzie zawierała kilka zakładek m.in: startowa, kontakt, system, zaloguj, rejestruj itp..
No i się zawiesiłem na kontrolerze i pytanie czy mogę zrobić coś takiego : Kod class Controller{ private $model; private $view; private function __construct(){ $this->model = new Model(); if( isset($_GET['action'] ) ) { $action = (string)$_GET['action']; $this->view = new View.$action.'()'; } else{ $action= 'start'; $this->view = new View.$action.'()'; } } public function Model(){ return $model->getModel(); } public function View(){ return $view->getView($this->Model()); } } Jak zrozumiałem, pytanie czy dobrze: Każdy model ma mieć swój widok? Czy raczej każda akcja ma swój Widok, a model może być ten sam - pobieranie danych z DB i ew. obróbka ich. Hyh... I jak najlepiej to rozwiązać przy rejestracji i logowanu? Tworzy klase Form z metodami showForm i przetworzForm? Ten post edytował martq 25.03.2009, 21:12:48 |
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 15:21 |