Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]SRP, DRY itd. a wielość powiązanych klas
porzeczki
post 13.11.2017, 09:23:31
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

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


Przedszkole to przedszkole.

"Twórz jak najwięcej małych klas"
"Nie twórz ciasnych wiązań między klasami"
"Jeden argument ok, dwa to za dużo, trzy zmień coś"

Boję się dzielić kod na wiele klas bo potem trzeba dostarczyć nowe rozdzielone obiekty do pierwszego. Nie pozwalają tworzyć obiektów wewnątrz metod. Nie pozwalają by konstruktor miał wiele argumentów.

Więc jak mam dostarczyć wydzielone obiekty do pierwszego (pierwotnego, sorry) obiektu by książki były szczęśliwe? W konstruktorze? I to nie będzie ciasne wiązanie?
Go to the top of the page
+Quote Post
Crozin
post 13.11.2017, 10:06:43
Post #2





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

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


Przede wszystkim trzeba pamiętać, że wszystkie hasła jakie podałeś, są dosyć... ogólne. We wszystkim trzeba zachować umiar i zdrowy rozsądek. Pokaż kod, który chciałbyś zweryfikować pod kątem zgodności z dobrymi praktykami, będziemy mogli ocenić czy coś wymaga poprawy czy nie.
Go to the top of the page
+Quote Post
Pyton_000
post 13.11.2017, 10:19:38
Post #3





Grupa: Zarejestrowani
Postów: 7 816
Pomógł: 1374
Dołączył: 26.10.2005

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


Dodatkowo powiem że nie ma co na siłę próbwanie wciskać wszystkich Good Practices do swojego kodu jeśli nie był pisany pod tym kątem. Spowoduje to jeszcze większy bajzel.
Lepiej i łatwiej na początek małymi krokami robić refactoring wydzielając coś gdzieś.

Wchodzisz w kod coś zmienić. Jeśli widzisz możliwość małego refactoringu to go zrób.
Go to the top of the page
+Quote Post
porzeczki
post 13.11.2017, 10:34:51
Post #4





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

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


Nie jestem w trakcie pracy na kodem, czytam książkę i mnie naszła ta myśl. Nie da się generalnie odpowiedzieć na pytanie: Jak poprawnie w klasie użyć (np) 5 różnych obiektów?

Bo rozumiem, że poprawnie byłoby wstrzykiwać instancje jako parametry konstruktora (Dependency Injection), ale tu też książka mówi, że nie ładnie mieć wiele argumentów.

No dobra, na tę chwilę przyjmuję że to zależy od sytuacji i nie da się rzucić generalną poradę.
Go to the top of the page
+Quote Post
trzczy
post 13.11.2017, 10:59:21
Post #5





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Wstrzykiwać można też Setter Injection
  1. $obj->setDependency($dep)
Go to the top of the page
+Quote Post
Pyton_000
post 13.11.2017, 11:04:18
Post #6





Grupa: Zarejestrowani
Postów: 7 816
Pomógł: 1374
Dołączył: 26.10.2005

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


Jeśli jest to kontroler to tutaj spinasz generalnie wszystko więc ilość zależności może być spora, ale jeśli jakaś klasa biznesowa ma dużo to już nie jest dobry znak.

Zależy też kto rozmumie dużo, dla mnie znośnie to 3-4, dużo to 6
Go to the top of the page
+Quote Post
porzeczki
post 13.11.2017, 11:31:46
Post #7





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

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


Cytat(Pyton_000 @ 13.11.2017, 11:04:18 ) *
Jeśli jest to kontroler to tutaj spinasz generalnie wszystko więc ilość zależności może być spora, ale jeśli jakaś klasa biznesowa ma dużo zależności to już nie jest dobry znak.

W sensie klasa biznesowa raczej powinna po prostu coś zwracać bez większych kombinacji z innymi klasami, a w kontrolerze żongluję tymi klasami biznesowymi. Tak?
Go to the top of the page
+Quote Post
Crozin
post 13.11.2017, 13:25:22
Post #8





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

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


Cytat
Nie da się generalnie odpowiedzieć na pytanie: Jak poprawnie w klasie użyć (np) 5 różnych obiektów?
Na takie pytanie można odpowiedzieć jedynie mając kontekst konkretnego przypadku. smile.gif
Cytat
Bo rozumiem, że poprawnie byłoby wstrzykiwać instancje jako parametry konstruktora (Dependency Injection), ale tu też książka mówi, że nie ładnie mieć wiele argumentów.
I generalnie rzecz biorąc ta książka bardzo dobrze mówi. Co zatem w przypadku, gdy w kontruktorze potrzebowałbym 23 argumentów? Najprawdopodobniej mamy do czynienia ze źle zaprojektowanym obiektem, który próbuje zajmować się zbyt dużą liczbą rzeczy na raz.
Cytat
Jeśli jest to kontroler to tutaj spinasz generalnie wszystko więc ilość zależności może być spora [...]
Kontrolery to dokładnie takie same klasy jak wszystkie inne. Nie powinny spinać wszystkiego, bo co jest do wszystkiego to jest do niczego. ;-) Z jakiegoś powodu da się w sieci znaleźć "odczucia", że kontrolery to jakieś specjalne klasy - nie, nie są w żaden sposób wyjątkowe.
Cytat
W sensie klasa biznesowa raczej powinna po prostu coś zwracać bez większych kombinacji z innymi klasami, a w kontrolerze żongluję tymi klasami biznesowymi. Tak?
Wręcz dokładnie odwrotnie. :-) To własnie klasy/metody z części "logiki biznesowej" potrzebują wykonać całą ciężką pracę w programie, więc to w nich znajdziemy sporo zależności. Inną kwestią jest to, że nadal trzeba trzymać się zasady - im mniej zależności tym lepiej.

W skrócie: musiałbyś podać konkrety przypadek do omówienia (code review) nawet w jakimś pseudokodzie, bo tak to będziemy prowadzić akademicki wywdów. smile.gif
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: 16.10.2019 - 21:08