Współpraca Entity |
Współpraca Entity |
4.06.2018, 14:39:05
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ć. |
|
|
13.06.2018, 16:49:24
Post
#2
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) |
Ok poczytałem trochę i mniej więcej mam już wizję tego jak mógłbym opisać strukturę swoich obiektów. Zaczynam już rozumieć ideę kompozycji i wydaje mi się, że powinienem skorzystać z wzorca strategii. Widzę już oczyma wyobraźni piękną strukturę z klasą Interval z której dziedziczą poszczególne typy interwałów typu FixedTimeInterval, TempoInterval itd. Oczyma wyobraźni projektuje już interfejsy do poszczególnych cech interwałów typu DurationInterface z którego powstają rzeczywiste klasy zachowań zwracające długość trwania danego interwału w zależności od parametrów danej implementacji interwału...
Jednego tylko kurde nie mogę rozkminić - jak to wszytko ująć w ramach Symfony, tj jak później taki obiekt zapisać do bazy, jak utworzyć na podstawie przetworzonego formularza etc. Wszystko jest dość mocno powiązane z Entity i jakby filozofia frameworka jest na tym oparta. Te klasy typu FixedTimeInterval powinny dziedziczyć z Entity, żeby przy okazji być samym Entity? Tak jak już (wydaje mi się) rozumiem duży obraz, tak chyba bez fragmentu kodu nie pojmuję jak to zaimplementować w Symfony. Pewnie jest jakieś eleganckie i proste rozwiązanie, ale mi to umyka... Bezstanowe serwisy są tu dość prostą koncepcją dodającą po prostu zachowania do Entity i ich relacje... Nie mam pojęcia jak przejść z takiego modelu na to o czym piszesz Ty ;-( Znasz może jakiś prosty projekt OS gdzie mógłbym to o czym piszesz zobaczyć? |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 17:09 |