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
matix
post
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


No witaj,

Na szybko, co zauważyłem (wieczorem dokładniej się przyjrzę;-)

1. vendor/ do .gitignore
2. wielki + za testy
3. w wielu miejscach brak trzymania się standardów PSR
4. podkreślenia zmiennych prywatnych/protected już nie są w modzie. nie powinno się ich używać.

Architektura też nie powala. Ja bym do tego podszedł inaczej.
Zyjemy w czasach, gdzie podejście DependencyInjection to norma. Dlaczego z tego nie skorzystać.

Zrobiłbym jeden CartManager, który przyjmowałby np. w konstruktorze UserInterface $user. Za pomocą tej oto klasy, dodawałbym, usuwał rzeczy z koszyka:
  1. * add(CartItemInterface $cartItem)
  2. * remove(CartItemInterface $cartItem)


Oczywiście metoda zwracająca elementy koszyka, też byłaby wskazana:
  1. /** @return \CartItemInterface[] $items */
  2. * getCartItems()


Zwróć uwagę na komentarz ;-) Dostajemy tablicę CartItemInterface. Co za tym idzie, mamy klasę, która implementuje ten interfejs, posiadająca atrybuty:
  1. protected ProductInterface $product;
  2. protected int $quantity = 1;


Typehinty tylko obrazowo.

Metoda Add w cartManagerze sprawdzałaby czy produkt jest już w tablicy, jeżeli tak, to tylko zwiększa quantity. W przeciwnym przypadku, dodaje nowy element do tablicy.

Oczywiście teraz klasa implementująca CartItemInterface miałaby magiczną metodę getCalculatedPrice(), gdzie miałbyś już zaszytą całą logikę wyliczania ceny. Cała klasa mogłaby się nazywać CartItemModifiedPrice, powiedzmy.

M.

Ten post edytował matix 18.04.2014, 11:07:42
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: 12.03.2026 - 13:30