Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Statyczne klasy vs Dependency Injection
Inscure
post 6.05.2011, 19:53:29
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 4
Dołączył: 18.09.2010

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


Pracując na projektem pisanym obiektowo, natknęliśmy się na problem korzystania z metod jednej klasy w drugiej.

Dyskutując na ten temat, odrzuciliśmy tworzenie obiektu innych klas wewnątrz danej klasy, czyli:

  1. class User
  2. {
  3. function __construct($sessionName)
  4. {
  5. $this->storage = new SessionStorage($sessionName);
  6. }
  7.  
  8. // ...
  9. }
  10.  
  11. $user = new User('SESSION_ID');



Zostały dwa sposoby, podane w nazwie tematu.
Małe wyjaśnienie odnośnie klas statycznych: jak pewnie większość się domyśla, chodzi o pisanie metod statycznych i korzystanie z nich w innej klasie w sposób następujący: Klasa::metoda();
W związku z tym zwracam się do Was z prośbą o wyrażenie opinii, z czego byście wy skorzystali i dlaczego.

Ja osobiście jestem za Dependency Injection znanego z Symfony, ale trzeba jakoś innych przekonać ;]

Ten post edytował Inscure 6.05.2011, 19:56:36


--------------------
eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
Go to the top of the page
+Quote Post
wookieb
post 6.05.2011, 19:56:43
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




DI bo:
- taką aplikację łatwiej testować
- aplikacja może być kompletnie odseparowana od innych w obrębie jednego skryptu
- dzięki DI lepiej zarządzasz pamięcią w aplikacji
I to wystarczy smile.gif
Powód edycji: [wookieb]:


--------------------
Go to the top of the page
+Quote Post
Zyx
post 6.05.2011, 20:44:35
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Pokaż ludziom dowolną książkę o Javie. DI jest tam znane od wieków i powstały już pewnie ze dwie tony opracowań o jego wyższości nad statycznymi metodami oraz singletonami.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
Bags_Bunny
post 6.05.2011, 20:54:01
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

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


Po raz kolejny spotykam się z brakiem zrozumienia semantyki słowa klasa. "Klasa", w której wszystko jest statyczne nie jest klasą, tylko przestrzenią nazw. Chyba jedyną różnicą miedzy tego typu zbiornikiem, a typową przestrzenią nazw jest możliwość dziedziczenia, choć i to da się zasymulować w przypadku zwyczajnych przestrzeni nazw.

Co więcej, jakie wg. Ciebie "klasa" statyczna ma zalety względem tworzenia obiektów w innych obiektach? Ja nie widzę żadnych.

DI daje wspaniałą, niemalże nieograniczoną, elastyczność. Po co sobie na siłę życie komplikować?


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Inscure
post 6.05.2011, 21:05:48
Post #5





Grupa: Zarejestrowani
Postów: 61
Pomógł: 4
Dołączył: 18.09.2010

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


Cytat(Bags_Bunny @ 6.05.2011, 21:54:01 ) *
Po raz kolejny spotykam się z brakiem zrozumienia semantyki słowa klasa. "Klasa", w której wszystko jest statyczne nie jest klasą, tylko przestrzenią nazw.

Co więcej, jakie wg. Ciebie "klasa" statyczna ma zalety względem tworzenia obiektów w innych obiektach? Ja nie widzę żadnych.


Jakbym zaczął pisać o przestrzeni nazw to nie każdy by kojarzył o co mi chodzi, a ja to odniosłem tylko do kodu zawartego miedzy class Nazwa {} smile.gif

Odpowiadając na pytanie: przecież DI to nie jest tworzenie obiektu w obiekcie, tylko wstrzykiwanie już utworzonego obiektu. A jeśli chodziło Ci o przykładowy kod, który podałem, to podkreśliłem nawet, że tą opcję odrzuciliśmy na samym początku wink.gif


--------------------
eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
Go to the top of the page
+Quote Post
Bags_Bunny
post 6.05.2011, 21:12:30
Post #6





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

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


Chodziło mi o przykładowy kod. A konkretnie o to, że z Twojej wypowiedzi mniej więcej wynika, że korzystanie z "klas" statycznych jest lepsze od kodu, który odrzuciliście. Ciekaw jestem dlaczego tak uważasz.


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Inscure
post 6.05.2011, 21:20:58
Post #7





Grupa: Zarejestrowani
Postów: 61
Pomógł: 4
Dołączył: 18.09.2010

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


Teraz rozumiem wink.gif Tak jak wstępnie napisałem, ja jestem za DI. Jako że sam nie podejmuje decyzji, powinienem uwzględniać propozycje innych.
Byłem za odrzuceniem obu sposobów (statyczność i podkreślony), ale tylko odnośnie drugiego nie było sprzeciwów (nikt nie proponował jego użycia).


--------------------
eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
Go to the top of the page
+Quote Post
smentek
post 12.05.2011, 18:07:01
Post #8





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


1. Myślałem, że to metody są statyczne, czy istnieje coś takiego jak klasa statyczna?
2. Czy prawdą jest że "klasa w której wszystko jest statyczne" to nie klasa?
3. Czy rzeczywiście "klasa w której wszystko jest statyczne" to to samo co przestrzeń nazw?
4. Co ma DI do metod statycznych?
5. Jezeli nie tworzycie obiektów w "danej klasie" to gdzie je tworzycie (pytam nie o teorię jak można to rozwiązać, tylko o wasz "konkretny projekt pisany obiektowo" )?


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
Crozin
post 12.05.2011, 18:49:51
Post #9





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

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


Oczywiście DI. Dlaczego? Bo jak przykładowo przyjdzie w przyszłości zmienić jakiś fragment systemu to przy korzystaniu z DI co najwyżej ktoś się popłacze, ale nikt się nie powiesi... wink.gif Wcześniej padły już sensowne argumenty.

@smentek:
1. Istnieją, ale nie w PHP.
2. Technicznie rzecz biorąc klasa to klasa, ale jakby na to jakoś logiczne spojrzeć to tak - klasa z samymi metodami statycznymi to nie klasa.
3. Technicznie nie, ale pod wieloma względami obie te rzeczy są bardzo podobne i mają niemal takie samo zastosowanie.
4. W sumie może z takowych korzystać...
5. "Na zewnątrz" prawdopodobnie w DIC-u

Ten post edytował Crozin 12.05.2011, 18:55:17
Go to the top of the page
+Quote Post
pejott
post 12.05.2011, 19:01:22
Post #10





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


Cytat(Crozin @ 12.05.2011, 19:49:51 ) *
5. "Na zewnątrz" prawdopodobnie w DIC-u


Szczególnie polecam 2 wynik.
Go to the top of the page
+Quote Post
smentek
post 13.05.2011, 21:18:33
Post #11





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


@crozin
5. "Na zewnątrz" prawdopodobnie w DIC-u

Masz na myśli IoC który wewnętrzne zamienia ustawienia zapisywane w dajmy na to xml'u i generując z nich klasy? A przepraszam "klasy statyczne" czyli jednak nie klasy. Logicznie rozumując... smile.gif


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
Inscure
post 13.05.2011, 23:00:10
Post #12





Grupa: Zarejestrowani
Postów: 61
Pomógł: 4
Dołączył: 18.09.2010

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


eee tam, chodzi o kod miedzy class{} i chyba już o tym pisałem? ;]




--------------------
eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
Go to the top of the page
+Quote Post
sarxos
post 15.06.2011, 15:05:37
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 15.06.2011

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


Zamiast DIC może być tez Factory.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 22:14