![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, zaczynam zabawę z OOP'em przy wykorzystaniu wzorca MVC. Czy kod poniżej jest poprawny, czy też nie ? Co zmienić, co robić, czego nie robić (ogólnie tak jakos
![]() Z czasem będę dodawał nowe pytania, bo zapewne na jednym się nie skończy
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
po 1:
żadne takie ify z $_GET, to powinno być przekazane w konstruktorzem czyli np.
![]() 2.
to się aż prosi o zastosowanie wzorca projektowego "factory" ![]() po 3: DZIEDZICZENIE! - naprawdę warto byłoby z niego tu skorzystać ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
1.Ok dzięki, zaraz to poprawię.
2.Jakiś przykładzik by się dało ? 3.Przykład gdzie można to zastosować bym prosił ![]() Dzięki za opowiedzi ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
2. http://bukox.pl/php/wzorce-projektowe-factory/
3. mógłbyś spokojnie połączyć klasy character model i show character, tak, żeby ta druga dziedziczyła z pierwszej, bo jak znam życie to pewnie to jeszcze rozbudujesz i tak Ci będzie prościej ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
OK, dziękuje. Potestuję sobie to co podrzuciłeś. Zapewne pytań ciąg dalszy niedługo
![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1) Twój kod nie ma wiele wspólnego z MVC - brak w nim w ogóle warstwy widoku.
2) Nie za bardzo wiem co Pawel_W miał na myśli przez dziedziczenie. Tutaj jego wykorzystanie byłoby błędem - przecież ShowCharacter::DoAction() jedynie wykorzystuje CharacterModel. 3) Twoja klasa GameController bardziej przypomina Dispatcher niż kontroler. btw: return null; jest zbędne. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
wyszedłem z założenia, że każda postać będzie miała własne statystyki, dlatego dobrze byłoby to wszystko połączyć
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Model ma się zajmować swoim zadaniem: ma udostępniać dane, a nie nimi zarządzać.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Twój kod nie ma wiele wspólnego z MVC - brak w nim w ogóle warstwy widoku. A klasa ShowCharacter ? Cytat Twoja klasa GameController bardziej przypomina Dispatcher niż kontroler. Mógłbyś wyjaśnić dlaczego ? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Widok nie tworzy sam sobie modelu - to kontroler inicjalizuje widok i przekazuje mu model(e).
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Jedyne dziedziczenie jakie mi przychodzi tutaj na myśl to ewentualnie kontroler rozszerzający widok, żeby mieć dostęp do jego metod. Co do tych ifów w kontrolerze - zgodzę się z przedmówcą, ogólnie zrób sobie jakąś klasę router, która będzie parsować i filtrować żądanie GET, a jeśli kontroler ma parę różnych opcji co do wykonania akcji - to możesz np zastosować switcha miast tych ifów. Dodatkowo takie składowe funkcje widoku powinny zwracać te wartości zamiast od razu je wyświetlać, ogólnie funkcje same w sobie powinny zawsze coś zwracać. No i te kwestie o których Crozin też wspomniał.
Ponadto: http://www.phppatterns.com/docs/design/arc...rn?s=model+view Ten post edytował Luneth 15.08.2010, 03:01:27 -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
@Crozin ok, chyba załapałem
![]() @Luneth dzięki, przydatny link. Popracuję na kodem i zobaczę co mi wyjdzie. ![]() Wiecie co ? Jednak nie czaje absolutnie MVC ![]() Mógłby ktoś napisać/dać linka do baaardzo prostego przykładu MVC ? Taki który tłumaczy zasady tegoż wzroca. Byłbym wdzięczny. PS. Czytałem troche tematów na forum ale nic mi to nie dało. Głupi jakoś jestem ostatnio ![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Po prostu wszystko dzielisz na trzy kategorie: operacje na danych, pobieranie-udostępnianie danych, wyświetlanie danych (kontroler,model,widok). Kontroler ma wybierać model, dać go do widoku, widok z modelu ma wziąć dane i zapakować je w coś przyjemnego dla oka
![]() ![]() Tak samo jak masz bardziej złożone wzory matematyczne, ktoś je ułożył raz, byś Ty mógł ich używać i wykonywać obliczenia do których "zmusza" Cię ten wzór, zostały one przewidziane przez jego autora. Ufam, że kojarzysz wzór na deltę funkcji kwadratowej ![]() Ten post edytował Luneth 17.08.2010, 01:43:51 -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 14.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wymodziłem coś takiego, większość zerżnięta od Crozina ;D Luneth dzięki za ten post, pomógł i to bardzo. I jak mi wyszło ? |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
1. Jeśli robisz settery to ustal tym atrybutom jaki ma być do nich dostęp
![]() 2. Zakładając, że chcesz mieć różne modele i templatki do jednego widoku to ok, ale jak nie to niepotrzebne te settery (bo jak nie, to kontroler mógłby np widokowi przekazać zmienną z obiektem modelu jako parametr do konstruktora) 3. Trochę przekombinowane z tym zwracaniem widoku przez kontroler ale swoją drogą ciekawe ![]() Ten post edytował Luneth 17.08.2010, 12:04:19 -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat To właśnie programowanie strukturalne jest takim mozolnym zaznaczaniem punktów i ich łączeniem a ten wzór taką przejrzystą zależnością pomiędzy składowymi (wzorce projektowe, obiektowe programowanie). Nie... paradygmat programowania strukturalnego wcale nie jest gorszy od obiektowego - on jest inny.Cytat I jak mi wyszło ? Trochę zrypane Copy&Paste ![]() Cytat (bo jak nie, to kontroler mógłby np widokowi przekazać zmienną z obiektem modelu jako parametr do konstruktora) Raczej zły pomysł. Nagle w aplikacji pojawiło by się jedno API dla widoków, dla których można ustalić inny szablon i inne API dla takich ze stałym. Swoją drogą czegoś takiego jak stały szablon dla widoku być nie powinno - jak już to mógłby być jakiś domyślny.Cytat Trochę przekombinowane z tym zwracaniem widoku przez kontroler ale swoją drogą ciekawe Dlaczego przekombinowane? Działanie aplikacji niekoniecznie musi kończyć się wraz z ostatnią linijką kontrolera.
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Crozin: oczywiście, że programowanie strukturalne jest inne, myślę że wszyscy już o tym tutaj wiedzą, ale ciekawe spostrzeżenie
![]() ![]() ![]() Cytat Raczej zły pomysł. Nagle w aplikacji pojawiło by się jedno API dla widoków, dla których można ustalić inny szablon i inne API dla takich ze stałym. Swoją drogą czegoś takiego jak stały szablon dla widoku być nie powinno - jak już to mógłby być jakiś domyślny. Przecież powiedziałem, że jeśli przewiduje różne sposoby przedstawianie danych, to dobrze zrobił? A swoją drogą kompletnie nie rozumiem jak się doszukałeś jakichś problemów z różnymi API... ![]() Ten post edytował Luneth 17.08.2010, 15:01:28 -------------------- "It's always darkest before the dawn." |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Chyba oboje się nie zrozumieliśmy...
![]() Myślałem, że sugerujesz stworzenie dwóch wersji API dla różnego rodzaju widoków, co byłoby błędem. |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 16.07.2007 Skąd: Gorzów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
A to faktycznie kompletne nieporozumienie nam wyszło w tej kwestii
![]() -------------------- "It's always darkest before the dawn." |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.07.2025 - 06:18 |