Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
Mam takie pytanie teoretyczne, które od czasu do czasu pojawia się w moich projektach. Najlepiej chyba będzie opisać na przykładzie.
Piszę aplikację sportową (konkretnie dla pływaków) we frameworku Symfony i w niej mam między innymi dwa obiekty Entity: - User - Interval Użytkownik ma pewne cechy definiowalne - np. prędkość bazową (dajmy na to 2:00/100m), modyfikatory prędkości (np. gdy ma płetwy to płynie 10s/100m szybciej niż bez etc). Interwał to cegiełka z której buduję treningi do wykonania. Czyli każdy interwał posiada między innymi: - dystans do pokonania - prędkość wyrażoną jako prdkość bazowa +/- x sekund. - listę modyfikatorów do zastosowania - czyli np. dany interwał użytkownik ma płynąć w płetwach I teraz dochodzimy do tego co mnie interesuje. Mam konkretny interwał w którym jest płyń z prędkością bazową - 5s oraz użyj płetw. Mam konkretnego użytkownika, dla którego prędkość bazowa to 2:00, a modyfikator płetw daje - 10s. Czyli finalnie ten konkretny użytkownik ma popłynąć ten konkretny interwał w tempie 2:00 (prędkość bazowa użytkownika) - 5s (ustawienie interwału) - 10s (bonus za płetwy) - razem daje 1:45/100m. Pytanie brzmi - jaki obiekt powinien obliczyć tą konkretną wartość, żeby było prawidłowo i zgodnie ze sztuką. Interwał raczej nie powinien wiedzieć o użytkowniku i vice versa. Robienie tych samych obliczeń w 50 miejscach (np. w kontrolerach) jest bez sensu i trudne w utrzymaniu. Osobiście w tym celu stosuję usługę, którą sobie nazwałem WorkoutService i mam tam takie funkcje jak np getIntevalPace. Zastanawiam się czy to jest dobre rozwiązanie, czy może jakoś inaczej powinienem to ogarniać. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
Crozin - no i właśnie tego nie rozumiem ;-) Tzn rozumiem ideę, nie wykrozystuję encji do tego etc. Tylko nie wiem jak to poprawnie rozwiązać.
Na tą chwilę dokładnie działa to u mnie tak, że mam Workout (trening) -> składający się z bloków (blocks) -> bloki składają się z zadań (task) -> zadania składają się z interwałów (interval). Mam usługę o nazwie Workout, która odpowiada za wszelkie operacje na treningu. Czyli np. obliczanie długości trening/bloku, obliczanie temp dla danego użytkownika etc. Mam też obiekt VCSettings w którym przechowuje ustawienia potrzebne do przekształcenia abstrakcyjnego treningu w trening dla danego użytkownika - czyli w moim przypadku obiekt ten przechowuje informacje takie jak długość basenu, tempo bazowe, modyfikatory itd itp. Wywołania u mnie wyglądają tak $workoutService->getIntervalPace($interval, $vcsettings); $workoutService->getWorkoutDuration($workout, $vcsettings); itd itp. To jest ok, czy powinno to się odbywać jakoś inaczej. Jeśli tak to konkretnie jak? Tak jak pisze rozumiem ideę, ale nie jestem pewien jak to powinno wyglądać w praktyce. Wg Ciebie powinienem mieć klasę typu Interval, który powiedzmy powinna mieć np. przez konstruktor wrzucone $interval(encję) + np. mój obiekt vcSettings? Sorry, że tak drążę, ale chciałbym dobrze temat zrozumieć. |
|
|
|
athabus Współpraca Entity 4.06.2018, 14:39:05
Crozin CytatPytanie brzmi - jaki obiekt powinien obliczyć... 4.06.2018, 18:39:46
Crozin 1. Szczerze mówiąc nie jestem dokładnie pewien czy... 6.06.2018, 06:09:46
SmokAnalog Warto się zastanowić czy Interwał to w ogóle encja... 6.06.2018, 09:02:06
athabus @Crozin - kod na tą chwilę: https://www.dropbox.co... 6.06.2018, 10:05:04
Crozin 1. Przede wszystkim problemem tej klasy jest to, ż... 8.06.2018, 06:11:08
athabus Crozin tak jak już pisałem Ci na PW, jeszcze raz d... 10.06.2018, 15:11:51
Crozin 1. Nie bój się tworzyć wielu dedykowanych klas do ... 11.06.2018, 10:05:18
athabus Ok poczytałem trochę i mniej więcej mam już wizję ... 13.06.2018, 16:49:24
Crozin CytatJednego tylko kurde nie mogę rozkminić - jak ... 15.06.2018, 07:52:49
athabus Crozin nie mam żadnego fragmentu kodu, bo kompletn... 15.06.2018, 08:24:10
Crozin Wydaje mi się, że za bardzo skupiasz się w tej chw... 16.06.2018, 11:58:34
athabus Sorki, że tak długo się nie odzywałem, ale splotem... 29.06.2018, 15:22:50 ![]() ![]() |
|
Aktualny czas: 26.11.2025 - 04:29 |