MVC - jak łączyć i jak utrzymać połączenie.

MVC - jak łączyć i jak utrzymać połączenie.
BR
  • Rejestracja:prawie 15 lat
  • Ostatnio:prawie 2 lata
0

Witam,

Tworzę aplikację w PHP w modelu MVC i napotkałem na problemy:

  1. Wiem, że połączenie powinno znajdować się w osobnej klasie - nie w modelu. A co z operacjami na bazie danych? Tzn. mam funkcje typu select, insert itd. Czy je mogę wstawić do modelu? W końcu pobierają dane, a do tego służy model.
  2. W jaki sposób odwołać się do utworzonego połączenia? Czytałem, że można zastosować zmienną globalną, ale wadą jest powtarzanie się kodu. Czytałem też, że można zastosować Singleton, ale również nie jest to do końca poprawne rozwiązanie. Jakie jest najlepsze rozwiązanie tego problemu?

Pozdrawiam,
brando.

A3
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:5
0
brando napisał(a):
  1. Wiem, że połączenie powinno znajdować się w osobnej klasie - nie w modelu. A co z operacjami na bazie danych? Tzn. mam funkcje typu select, insert itd. Czy je mogę wstawić do modelu? W końcu pobierają dane, a do tego służy model.

Moim zdaniem najlepszym pomysłem jest stworzenie superklasy "Model" (z której będą dziedziczyć wszystkie modele), implementującej wszystkie potrzebne metody. Przy odrobinie sprytu można pobieranie danych zautomatyzować, jeśli np. będziesz trzymał schemat bazy w jakiejś tablicy - zobacz, jak to rozwiązano w CakePHP.

brando napisał(a):
  1. W jaki sposób odwołać się do utworzonego połączenia? Czytałem, że można zastosować zmienną globalną, ale wadą jest powtarzanie się kodu. Czytałem też, że można zastosować Singleton, ale również nie jest to do końca poprawne rozwiązanie. Jakie jest najlepsze rozwiązanie tego problemu?

Zmienna globalna nie jest dobrym pomysłem, ale nie wiem dlaczego Singleton miałby nie zdać egzaminu?

dzek69
Singleton to lipa jak potrzebujesz podłączyć się do dwóch baz (czasem jest potrzeba, a przebudowywania wszystkiego na inną metodę będzie ciężkie potem)
axelbest
@dzek69 ja tam kiedyś zrobiłem singleton obsługujący dwie bazy -> np db::getConnection() [domyślna baza] i db::getConnection('inna_baza')
B3
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Postów:79
0

Możesz utworzyć klasę, która będzie posiadała funkcję statyczną odpowiedzialną za zwrócenie połączenia do DB i na tym połączeniu działać w modelach.

C8
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 2 miesiące
  • Postów:80
0
art3c napisał(a):

Moim zdaniem najlepszym pomysłem jest stworzenie superklasy "Model" (z której będą dziedziczyć wszystkie modele), implementującej wszystkie potrzebne metody. Przy odrobinie sprytu można pobieranie danych zautomatyzować, jeśli np. będziesz trzymał schemat bazy w jakiejś tablicy - zobacz, jak to rozwiązano w CakePHP.

Można też nawiązywać połączenie w konstruktorze superklasy model, wtedy za każdym razem kiedy korzystamy z modelu mamy nawiązane połączenie z bazą.

axelbest
Ale nie zawsze każdy model korzysta z bazy - więc robi się niepotrzebnie wiele połączeń.
C8
Wziąłem z PHP Light MVC. W tym małym Frameworku, superklasa model zawsze tworzy połączenie w kostruktorze.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.