![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 30.08.2006 Skąd: Bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Witam
W końcu skusiłem napisać ![]() Niedawno w poszukiwaniu jakiejś teorii pozwalającej oddzielić logikę od widoku itd trafiłem na MVC. Poczytałem, wszystko ok, rozumiem, tylko problem pojawia się przy chęci sprawdzenia teorii w praktyce. MVC zakłada wyraźny podział na warstwy, które ze sobą współpracują i żadna sama w sobie dużo nie zdziała. Stąd moje pytania. 1.Od czego zacząć pisać, lub też najpierw projektować? Klasy powinny pozwalać na przeniesienie ich do innych skryptów, w takim razie (2)jak na przykład pobierać dane z bazy danych jeśli do obsługi MySQL mam osobną klasę? To na razie tyle. ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze skorzystaj z wyszukiwarki (ba na tej stronie jest co najmniej jeden temat o MVC).
-------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 30.08.2006 Skąd: Bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Czy wszystkie Twoje 418 postów tak wygląda? Czytając niektóre Twoje ostatnie posty tak sądzę.
Czy Ty na prawdę myślisz, że nie szukałem, nie czytałem? Więc uświadamiam Cię, że szukałem i czytałem. Połowa z nich dotyczy rozumienia pojęcia MVC, a druga połowa konkretnych problemów. Ja natomiast pytam, od czego ( której warstwy ) i mniej więcej jak zacząć projektować coś takiego. Jeśli znajdziesz temat z konkretną odpowiedzią na moje pytania przyznam Ci rację. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
np stworz sobie klasę bazową którą każda klasa będzie rozszerzać.
U mnie jest to np. klasa abstrakcyjna DocumentObject, która udostępnia połączenie z bazą itp.
następnie będzie inna klasa, np. AbstractView, ona rozszerza DocumentObject, do tego definiuje abstrakcyjne metody dla widoków, udostępnia smarty, i tak dalej.. warstwa po warstwie.. polecam przelecieć parę artykułów o MVC (ze zrozumieniem), potem brać się za robotę. -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Czy wszystkie Twoje 418 postów tak wygląda? Czytając niektóre Twoje ostatnie posty tak sądzę. Czy Ty na prawdę myślisz, że nie szukałem, nie czytałem? Więc uświadamiam Cię, że szukałem i czytałem. Połowa z nich dotyczy rozumienia pojęcia MVC, a druga połowa konkretnych problemów. Ja natomiast pytam, od czego ( której warstwy ) i mniej więcej jak zacząć projektować coś takiego. Jeśli znajdziesz temat z konkretną odpowiedzią na moje pytania przyznam Ci rację. Odpowiedz na te wszystkie pytania sa na forum... -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]() ![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
Może na początek podkreślę - każdy programista ma inną wizję MVC - to tylko zwykły szablon. To tak jak szablon strony (załózmy z webmark-a, którą dobrze wspominam, niestety - już jej nie ma ;() każdy sobie to lekko przerobi, zmieni, itp. To tak gwoli ścisłości, gdyż to co niżej przedstawię, jednemu się będzie podobało, a drugiemu nie.
Przede wszystkim Kontroller ma zarządzać widokiem i modelem i nic nie wiedzieć o danych. To więc:
Teraz pewnie wiele osób się zapyta, dlaczego to Widok przechowuje w swojej zmiennej instancję klasy Model ? Ano dlatego, żeby w widoku także można było pobierać dane z modelu, gdyż to jest założeniem MVC. Przy okazji jest to wiele wygodniejsze, gdyż jak jest np. lewe menu, które posiada np. blok "losowa fotka", to potem trzeba w każdej metodzie controllera dopisywac te bzdetne linijki kodu, by pobierane były dane z modelu. A po co , skoro można to zrobić jednym zapytaniem w Widoku. Widok ma za zadanie gromadzić dane z szablonow i je zwracać controllerowi, tak więc (pomijam tutaj klasy abstrakcyjne, zeby pokazac oco chodzi - wiadomo - lepiej dziedziczyc sobie niektore metody z klasy abstrakcjii)
Model ma pobierać dane z różnych źródeł i je zwracać, czyli po prostu:
Do tego dochodzi jeszcze FrontController który pobiera sobie z routera kontroller i akcję i odpala odpowiedni kontroller i jego metodę. W moim przypadku (czyt. moj fw) jest coś takiego, że FrontController wybiera kontroller, i później jest coś takiego:
i już wszystko jasne ![]() Mam nadzieję, że ten post rozwiąże wszelkie wątpliwości co i jak połączyć. Pozdrawiam, Matix. -------------------- Nawet, jeżeli nie jesteś zainteresowany usługami IT ani outsourcingiem, a Twoją pasją jest programowanie - zobacz naszą stronę. Piszemy dużo fajnych use-caseów, jak podchodzimy do tematu programowania dla naszych klientów. A tak na co dzień tworzymy budujemy mvp oraz tworzymy platformę b2b.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 30.08.2006 Skąd: Bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi
![]() Ale jednak jeszcze jedna sprawa. Jeśli chodzi o połączenie z DB. em1X podał klasę abstrakcyjną która zawiera metodę połączenia, i jest rozszerzana, przez resztę klas. Natomiast matix najwyraźniej ma osobną klasę Database, z której korzysta wewnątrz klas widoku. I właśnie o to pytałem też w pierwszym poście. Jeśli dobrze zrozumiałem, to wyszły dwa rozwiązania. Pierwsze, dzięki której jakby nie mieszamy klas. I drugie, czyli tak jak robiłem dotychczas, osobna klasa dla db i inne klasy wewnątrz tworzą jej obiekty. Czy jakiś komentarz do tego, czy mam dobrze rozumiem, że przedstawiliście dwa sposoby i mam robić jak uważam ? ![]() matix'owi dziękuję za pokazanie relacji między warstwami, oraz matix'owi i em1X za podpowiedź do głównego pytania - od czego zacząć pisać. ![]() Aha i jeszcze jedno, do której warstwy zaliczamy tą klasę, którą podał em1X, model, czy kontroler. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
Tak jak pisałem. Jest to kwestia, jak kto woli.
Co do tego, gdzie ta klasa abstrakcyjna pasuje - stawiam na Model, gdyż połączenie z bazą oraz pobieranie configa do czegoś, jest raczej funkcją modelu. Chociaż szczeże nie widzę w tym sensu - po co wszystko ładować na raz do pliku. Lepiej wybierać to, co potrzebujesz. Jestem za swoją wersją ![]() -------------------- Nawet, jeżeli nie jesteś zainteresowany usługami IT ani outsourcingiem, a Twoją pasją jest programowanie - zobacz naszą stronę. Piszemy dużo fajnych use-caseów, jak podchodzimy do tematu programowania dla naszych klientów. A tak na co dzień tworzymy budujemy mvp oraz tworzymy platformę b2b.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 30.08.2006 Skąd: Bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Ok, prawie mnie przekonałeś.
![]() Tylko jeszcze jedna sprawa. Patrząc na klasę Model, tworzy ona instancję klasy Database, oraz używa metod w niej zawartych. Co oznacza, że w innych klasach też by tak to miało wyglądać. W takim układzie jak radzić sobie w sytuacji, gdy chcę np. rozbudować, czy zmienić tę klasę ( Database). Dajmy na to zamiast metody wykonywującej zapytania dam kilka metod osobno od select, insert itd. ( przykład niekoniecznie sensowny ![]() |
|
|
![]() ![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
Tak, musisz zawsze zmienić w każdej metodzie modelu wszystko. Najlepiej weź kartkę, rozpisz sobie co i jak ma wyglądać i po prostu zrób jeden, porządny sterownik MySQL. Do przykładu, ja ci pokażę mój:
Klasę mojego autorstwa, db_mysql znajdziesz tutaj: http://cpaste.com/3175. Uploaded specjalnie for you ![]() Z kolei klasa db_abstract jest na stronie http://cpaste.com/3174. Przykłady użycia:
Oczywiście z tej klasy możesz sobie skorzystać. Bardzo fajnie działa ![]() Pozdro ![]() -------------------- Nawet, jeżeli nie jesteś zainteresowany usługami IT ani outsourcingiem, a Twoją pasją jest programowanie - zobacz naszą stronę. Piszemy dużo fajnych use-caseów, jak podchodzimy do tematu programowania dla naszych klientów. A tak na co dzień tworzymy budujemy mvp oraz tworzymy platformę b2b.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 30.08.2006 Skąd: Bełchatów Ostrzeżenie: (0%) ![]() ![]() |
1. Gdzie połączenie z DB? ;> Przegapiłem, czy brak? ( metoda dbConnect)
2. Podoba mi się ![]() ![]() Czyli jedyne pytanie to czy po prostu zapomniałeś połączyć się z bazę w przykładzie czy coś pominąłem ![]() Skoro mówisz, że mogę skorzystać, to skorzystam ![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie
![]() Metoda dbConnect() jest odpowiedzialna za łączenie z bazą danych, tylko, że wyciąga ona dane z array-a w postaci:
Natomiast jest takie cudo, jak setSource(), która pobiera mi przez mój frameworkowy config, plik /configs/nazwaconfiga.ini, gdzie jest konfiguracja w stylu Kod host = localhost user = user pass = pass type = mysql table = tabela i wiadomo, przekształca to na arraya;) Tak własnie to wszystko działa ![]() -------------------- Nawet, jeżeli nie jesteś zainteresowany usługami IT ani outsourcingiem, a Twoją pasją jest programowanie - zobacz naszą stronę. Piszemy dużo fajnych use-caseów, jak podchodzimy do tematu programowania dla naszych klientów. A tak na co dzień tworzymy budujemy mvp oraz tworzymy platformę b2b.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 22.01.2003 Skąd: www Ostrzeżenie: (0%) ![]() ![]() |
Tak, musisz zawsze zmienić w każdej metodzie modelu wszystko. Najlepiej weź kartkę, rozpisz sobie co i jak ma wyglądać i po prostu zrób jeden, porządny sterownik MySQL. Do przykładu, ja ci pokażę mój: Klasę mojego autorstwa, db_mysql znajdziesz tutaj: http://cpaste.com/3175. Uploaded specjalnie for you ![]() Z kolei klasa db_abstract jest na stronie http://cpaste.com/3174. witajcie, A jak wygląda klasa db_exception ![]() ![]() pozdr -------------------- poczatkujacy
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 278 Pomógł: 10 Dołączył: 13.02.2007 Skąd: Rybnik Ostrzeżenie: (0%) ![]() ![]() |
Tylko tyle;) -------------------- Nawet, jeżeli nie jesteś zainteresowany usługami IT ani outsourcingiem, a Twoją pasją jest programowanie - zobacz naszą stronę. Piszemy dużo fajnych use-caseów, jak podchodzimy do tematu programowania dla naszych klientów. A tak na co dzień tworzymy budujemy mvp oraz tworzymy platformę b2b.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 29.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
(...) Klasę mojego autorstwa, db_mysql znajdziesz tutaj: http://cpaste.com/3175. Uploaded specjalnie for you ![]() Z kolei klasa db_abstract jest na stronie http://cpaste.com/3174. (...) Czy ktoś ma jeszcze aktualne kody tej klasy, zaprezentowanej przez matrix'a - Niestey powyższe linki są już nie aktualne :/ Będę wdzięczny uaktualnienie linków lub inne propozycje (niezbyt rozdętych) klas, tego typu |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 3 Dołączył: 13.10.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Aby nie tworzyć nowego tematu i nieco odświeżyć...
Jest w php kilka kwestii, które mnie nurtują. Mianowicie, chciałbym zrobić własny framework MVC, ponieważ wydaje mi się to prostsze niż korzystanie z istniejących 'kombajnów', zalewających człowieka na wstępie masą helperów. Zarazem chciałbym zrozumieć jak to wszystko działa i mieć to poczucie, że to co pisze jest w 100% napisane przeze mnie. To co obecnie zaplanowałem dla swojego frameworka MVC to struktura: -Models -Views -Conrollers index.php (rewolucji nie ma ;P) Aktualnie całość działa tak, indexController.php który przechwytuje zmienną z adresu ($strona=example), sprawdza ją pod kątem bezpieczeństwa i zwraca odpowiedni widok poprzez include do index.php Widząc, frameworki innych osób, zastanawiam się, jak w to wszystko mam wpleść obiekty. Kombinowałem i jedyne do czego mi się przydadzą to modele danych, ale w innych wypadkach zastanawiam się po co? Skoro można zastosować funkcje? Z drugiej strony, widzę, że include niemal nie występuje w innych projektach, więc jak to jest? Przyznam że, martwi mnie moje nadużywanie include. Do każdego widoku dołączam plik z modelem i plik z konrtollerem, a główny szablon już całkowicie jest naszpikowany tymi wszystkimi plikami. Czy moje obawy są słuszne? Czy da się to jakoś rozwiązać? I do czego mogą mi się tu przydać obiekty? Jak z nich korzystać? Wiem, że pytania wydać się mogą śmieszne i może proste, ale nie mam kogo o to spytać. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Nie skupiaj się na implementacji, tylko na tworzeniu interfejsów. Zrozum czym jest programowanie zorientowane obiektowo.
-------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Po ostatnim poście stwierdzam że iro88 nie zna podstaw oop a chce się brać za pisanie fw.
Iro88, naucz się dobrze php i jakiś fw i dopiero potem zabieraj się za własny jeśli nadal będziesz mieć taką potrzebę. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 22:32 |