Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ActiveRecord bez metod statycznych, Pobieranie połączenia DB za pomocą metody statycznej innej klasy
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Jak stworzyć ActiveRecord bez udostępniania połączenia z bazą danych za pomocą statycznej metody innej klasy?

Przykład wykorzystania AR:
  1. $post = new Post;
  2. $post->title = 'przykładowy post';
  3. $post->content = 'zawartość postu';
  4. $post->save();

Aby wykonać taki kod, muszę w klasie Post zrobić dziedziczenie po klasie, np. ActiveRecord, i w tej klasie, a konkretnie w konstruktorze, pobrać połączenie z bazą danych, z jakiejś statycznej metody, która ją udostępnia. Czyli na przykład klasy APP i metody getDatabaseConnection():
  1. class APP
  2. {
  3. private static $db;
  4.  
  5. // static setter...
  6.  
  7. public static function getDatabaseConnection()
  8. {
  9. return self::$db;
  10. }
  11. }


Ale czy jest możliwość stworzenia obiektów ActiveRecord bez pobierania połączenia z DB za pomocą innej metody statycznej? Robi się tutaj bezpośrednie powiązanie, nie tylko metody, ale i nazwy klasy, a to totalnie nie współgra z zasadami SOLID.

A może zamiast tworzyć obiekt normalnie (new Post), robić to za pomocą innej metody, na przykład klasy ActiveRecordFactory, i w niej, po utworzeniu obiektu Post, wstrzyknąć obiekt bazy danych i zwrócić obiekt Post?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Użycie odwołań statycznych z reguły uniemożliwia trzymanie się reguł SOLID, nie znam Yii ale stawiam na to, że nie jest ono pod tym względem wyjątkiem.

@by_ikar: Nie róby z tego kolejnego bezsensownego wątku w stylu FW A vs B vs C vs D.

PS. Na stronie każdego FW znajdziesz informację o tym jaki to on nie jest szybki, profesjonalny, wygodny, elastyczny i w ogóle nie wiadomo po co istnieją inne rozwiązania. (IMG:style_emoticons/default/wink.gif)

Ten post edytował Crozin 29.07.2014, 19:34:50
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat(Crozin @ 29.07.2014, 20:34:16 ) *
Użycie odwołań statycznych z reguły uniemożliwia trzymanie się reguł SOLID, nie znam Yii ale stawiam na to, że nie jest ono pod tym względem wyjątkiem.

@by_ikar: Nie róby z tego kolejnego bezsensownego wątku w stylu FW A vs B vs C vs D.

PS. Na stronie każdego FW znajdziesz informację o tym jaki to on nie jest szybki, profesjonalny, wygodny, elastyczny i w ogóle nie wiadomo po co istnieją inne rozwiązania. (IMG:style_emoticons/default/wink.gif)


Nie mam zamiaru tworzyć wątku FW vs FW. Chciałem zwrócić uwagę że one wszystkie są opisywane jako MVC, super lekkie, super szybkie etc. A prawda jest taka że z nich wszystkich na prawdę szybki jest phalcon, po mimo że niewiele w nim zrobiłem, bo tylko przebrnąłem przez quick tour, to no on musi być szybszy dlatego że jego klasy są modułami php i do czasu kiedy inne będą działały jako zwykłe pliki php, nie będą w stanie go przebić w szybkości.. Ale fajnie by było jakby można było instalować frameworki czy jakieś liby tak jak w node, a one same działały by na podobnej zasadzie jak moduł php.. No mogłoby to dość znacznie zmienić podejście do php (IMG:style_emoticons/default/biggrin.gif)

Yii ma podobnie zrobioną logikę co laravel, klasy same w sobie są nie statyczne (nie wszystkie metody, raczej większość), ale istnieją inne klasy (fasady w laravel) które umożliwiają dostęp do tych klas poprzez __callStatic odwołują się do instancji tych klas z kontenera IoC. Sam aktualnie nie wiem co o tym myśleć w przypadku laravela, no ale póki co zobaczymy..
Go to the top of the page
+Quote Post

Posty w temacie


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: 28.12.2025 - 17:51