Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ocena kodu OOP - rozwiazania, Prosze o uwagi do implementacji koszyka wg zadanego interfejsu
Lechus
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 4.02.2014

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


Szanowni profesjonaliści,

Proszę, w wolnej chwili, o przejrzenie kodu i udzielenie cennych wskazówek jak ten kod można ulepszyć.

Kod na Githubie

Plik READ ME.txt - tu jest opis co miało być zaimplementowane.
Instrukcja implementacji interfejsu
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%)
-----


@viking: Jeszcze raz, wyjaśnijmy sobie proszę bardzo fundamentalne deklaracje. DI to po prostu nazwa dla pewnego wzorca/schematu kodu - nic więcej. Niejednokrotnie wykorzystuje się go nawet nieświadomie. To co cały czas tutaj opisujesz to różnego rodzaju kontenery/menadżery zależności - to już zupełnie inna kwestia (fakt, że w nazwie mają dependency injection (np. CDI) nie oznacza, że tym są). Te już występują w przeróżnych wariantach, z różnymi opcjami konf. bazującymi na różnych podejściach do samej konf. zależności. Często można je spotkać pod nazwą dependency injection container, ale DI ≠ DIC - i to jest najważniejsze w moim i @destroyerr'a postach.

Te kontenery w swoim wnętrzu bardzo często faktycznie będą obsługiwały coś przy pomocy takiej właśnie tablicy (string => obiekt), ale to jest na ich wewnętrzny użytek. Jako użytkownik takiego kontenera nie powinieneś w ogóle z tego korzystać. Tutaj niestety pojawia się taki problem, że wiele FW wręcz zachęca w swoich dokumentacjach do korzystania z tego, stąd też ich użytkownicy to robią. Co do Java'owych @Inject (z CDI) czy @Autowired (ze Springa)
1. To już są narzędzia konkretnych realizacji kontenerów zależności i należą do ich wewnętrznej konfiguracji. Same w sobie nie mają bezpośredniego związku z tematem wstrzykiwania zależności. To dopiero sam kontener realizuje to zadanie.
2. Te adnotacje są wynikiem wprowadzania do Javy (w sumie do PHP też) coraz szerszego podejścia convention over configuration oraz chęci skrócenia kodu/plików konfiguracyjnych. Przy czym warto tutaj zaznaczyć, że dla np. takiego Springa nadal jest to tylko jeden ze sposobów na określenie "co wstrzyknąć", a nie jego podstawowy/jedyny sposób.
3. W PHP istnieją podobne narzędzia, np. w Symfony mamy dostęp do @Inject (JMSDiExtraBundle) przy czym ich działanie jest jednak nadal trochę odmienne - nie potrafi pracować na interfejsach i zawsze musi mieć podany konkretny serwis do wstrzyknięcia.

Na koniec chciałem tylko podkreślić jedną rzecz. Zarówno ja jak i @destroyerr (myślę, że mogę go tutaj wymieć ;] ) również uważamy że zapis typu:
  1. $mailer = $this->someContainer->get('my.mailer.service');
  2. $mailer->doSth();
Jest zły, niweczy większość, jak nie wszystkie z zalet DI, utrudnia testowanie aplikacji oraz może sprawiać jakieś problemy przy przejmowaniu po kimś kodu. Chcieliśmy tylko zwrócić Ci uwagę na to że pow. przykład kodu nie jest przykładem realizacji dependency injection. (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- Lechus   Ocena kodu OOP - rozwiazania   17.04.2014, 08:09:44
- - matix   No witaj, Na szybko, co zauważyłem (wieczorem dok...   18.04.2014, 11:06:55
- - skowron-line   - echo w metodzie - addItem zmien na add i niech z...   18.04.2014, 11:54:15
|- - Dejmien_85   Cytat(skowron-line @ 18.04.2014, 12...   18.04.2014, 23:05:46
- - viking   Cytat(matix @ 18.04.2014, 12:06:55 ) ...   19.04.2014, 06:47:53
|- - Dejmien_85   Cytat(viking @ 19.04.2014, 07:47:53 )...   19.04.2014, 09:27:24
- - destroyerr   @viking ale namieszałeś. Odnośnie przejmowania wię...   19.04.2014, 09:17:13
- - viking   @destroyerr To co pokazałeś to zwykłe rzutowanie t...   19.04.2014, 16:37:43
- - destroyerr   To właśnie mój kawałek kodu pokazuje czym jest DI....   19.04.2014, 19:06:42
- - Crozin   @viking: Trochę Cię zmartwię. To o czym piszesz to...   19.04.2014, 19:11:32
- - viking   To o czym piszę jest dokładnie implementacja DI we...   19.04.2014, 21:41:12
- - destroyerr   Ale Ty piszesz o implementacji kontenera/menedżera...   19.04.2014, 22:41:00
- - viking   Zdaję sobie sprawę że przydałby mi się urlop i moj...   20.04.2014, 06:24:34
- - Crozin   @viking: Jeszcze raz, wyjaśnijmy sobie proszę bard...   20.04.2014, 09:00:07
- - viking   W porządku. Jeśli potraktować sprawę w ten sposób ...   20.04.2014, 09:40:36
- - Crozin   Cytat[...] Jednak idei nie wprowadzimy w aplikacji...   20.04.2014, 10:06:56
- - JacekJagiello   Corzin, piszesz, że zapis typu: [PHP] pobierz, pla...   21.04.2014, 18:53:33
- - Crozin   Trochę większy przykład:[PHP] pobierz, plaintext c...   22.04.2014, 14:23:23
- - JacekJagiello   Właśnie, takie użycie kontenera rozpatrywałem w ko...   23.04.2014, 22:24:06
- - Ormin   Cytat(JacekJagiello @ 23.04.2014, 23:24...   25.04.2014, 15:20:56


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: 17.10.2025 - 12:47