Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Współpraca Entity
athabus
post
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ć.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
athabus
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Crozin nie mam żadnego fragmentu kodu, bo kompletnie nie wiem jak się do tego zabrać. Niestety tak jak piszesz wszelkie "best practices" czy "demo project" w Symfony są tworzone tak jak ja to robię, czyli Entyty + Serwisy ;(

Sprowadzając to do najbardziej uproszczonego przypadku.

Mam Entity Interval + tworzę obiekt domenowy Interval (docelowo interwał byłby klasą abstrakcyjną po której dziedziczyłyby różne typy interwałów, ale tutaj załóżmy, że jest to od razu konkretna klasa).
Pytania jakie mnie nachodzą:
- obiekt interwał ma jakieś properties, w dużej mierze takie same jak samo Entity. Czy zatem należy stworzyć konstruktor, który "przepisze" te wartości z entity, czy po prostu Entity dać jako element Interwału?

- załóżmy, że wykonałem jakieś operacje na Interval, które chce teraz zapisać do bazy. Znów - w którym miejscu kodu przekazać moje zmiany do Entity?

Takich pytań mam więcej - np. jak obsługiwać relacje etc. Bo teraz jedyne rozwiązania jakie mi przychodzą do głowy to ogromna redundancja kodu aby w obiekcie Interval odtworzyć sporo zachowań, które w Entity (dzięki Doctrine) mam z automatu.

No po prostu utknąłem w takim punkcie, że nie wiem jak zacząć i z chęcią zobaczył bym jakiś projekt w Symfony, gdzie jest to rozwiązane prawidłowo, żeby zaskoczył. Przypuszczam, że po prostu blokuję się w jakimś miejscu na złym rozwiązaniu.
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 14:20