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%)
-----


Cytat
Staram się pisać aplikację, która nie używa metod statycznych i jest zgodna z zasadami SOLID.
Bardzo, bardzo dobrze.
Cytat
Dodatkowo chcę to pogodzić z możliwie jak najprostszym pisaniem kodu a ActiveRecord daje mi aż nad to co bym chciał - prościej się już chuba nie da, niż te 4 linijki.
Ilość linii kodu nie ma przełożenia na prostotę.
  1. $post = $someService->createNewPost();
  2. $post->setTitle('...');
  3. $post->setContent('...');
  4. $someService->persist($post);
Jest równie prostym kodem, a w jego wykonaniu mogą brać udział dziesiątki obiektów, odpalonych może być multum zdarzeń itp. itd.

Jeżeli chcesz pisać wysokiej jakości kod zainteresuj się jakimś rozwiązaniem bazującym w oparciu o DataMappera (nie ActiveRecord) - np. bardzo popularne Doctrine.
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: 29.12.2025 - 15:28