Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%)
|
Załóżmy, że mamy następującą sytuację: użytkownik może podjąć się realizowania projektu, który składa się z wielu zadań.
Tworzę więc klasy: User, Project i Task. Podejmowanie projektu składa się z wykonywania kolejnych zadań i w każdym momencie musi być jasne które z zadań zostały już zrealizowane. Nie umiem się zdecydować co zrobić w momencie podejmowania zadania przez użytkownika. Problemem dla mnie jest to, że chyba nie mogę po prostu utworzyć relacji między użytkownikiem, a projektem bo mimo, że miałbym wtedy wszystkie dane na temat zadań do wykonania to nie miałbym gdzie zapisać informacji na temat ich realizacji przez konkretnego użytkownika. Na przykład gdy użytkownik zakończy zadanie to muszę gdzieś zapisać datę tego zdarzenia. Myślałem o stworzeniu kolejnych dwóch klas np. UserProject i UserTask, które reprezentowałyby podjęty projekt i jego zadania. W momencie podejmowania projektu z 10 zadaniami byłby dla danego użytkownika tworzony obiekt UserProject oraz 10 obiektów UserTask w realcji z UserProject. Mógłbym wtedy zapisać w tych nowych obiektach dowolne dane. A może raczej powinienem tylko dodać projekt do myProjects obiektu użytkownik, a dopiero w trakcie realizowania kolejnych zadań tworzyć obiekty np. finishedTask? Ale gdzie mógłbym wtedy przechować informację o np. dacie podjęcia projektu? A może jeszcze jakoś inaczej? Ten post edytował Foxx 21.10.2013, 11:02:32 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%)
|
No to wygląda, że podane rozwiązanie jest tym czego potrzebujesz.
1. Użytkownik jest dwukrotnie powiązany z zadaniami - poprzez projekt oraz poprzez UserTask. Ale może to nie jest problem? Raczej bym patrzył na to, że user jest powiązany z projektami oraz user jest powiązany z zadaniami. Samo przypisanie do projektu znaczy tylko tyle, że w nim uczestniczy i np. pojawi mu się na liście, ale niekoniecznie coś z nim jeszcze robił. 2. Przeprowadzanie niektórych istotnych operacji może być przykre, np: znajdź kolejne zadanie, które powinien teraz realizować user. Albo znajdź wszystkie zadania o danym statusie (status byłby w tabeli user_task) z wybranego projektu. Gdzie tam, po prostu dobranie odpowiedniego zapytania. 3. Bezpośrednie powiązanie usera z zadaniami - no sam nie wiem... jakoś czuję, że to mogłoby być bardziej eleganckie. User już jest powiązany z zadaniami poprzez projekt. Z drugiej strony moje propozycje na temat "klonowania" struktury projektu i jego zadań może są jeszcze mniej eleganckie... Napewno jest to lepsze rozwiązanie od klonowania struktury projektu (generalnie jest to antywzorzec). I tak jak wspomniałem - user będąc powiązany z projektami nie jest powiązany tak naprawdę z zadaniami. // EDIT Btw. sam temat z frameworkami i Sf2 ma związku tyle co nic. Raczej ORMy -> Doctrine Ten post edytował pyro 21.10.2013, 13:45:14 |
|
|
|
Foxx [Symfony][Symfony2][SF2] Jakie obiekty mają największy sens 21.10.2013, 11:02:06
Ghost_78 Ja w takich sytuacjach lubie uzywac relacji n:m cz... 21.10.2013, 11:37:31
pyro A nie możesz po prostu stworzyć m:m między użytkow... 21.10.2013, 12:05:54
Foxx @Ghost_78: Istotne jest dla mnie przechowywanie ko... 21.10.2013, 12:07:59
pyro Niech no ja naszkicuję "profesjonalny" m... 21.10.2013, 12:10:44
Foxx Czyli, trzymając się kontekstu Symfony2, proponuje... 21.10.2013, 13:08:13
pyro Możesz w takim razie dokładniej opisać jak się odb... 21.10.2013, 13:10:58
Foxx Już opisuję:
User decyduje się na wybrany projekt... 21.10.2013, 13:19:26
pyro Ale task też może być realizowany przez kilku użyt... 21.10.2013, 13:24:40
Foxx Task może być realizowany przez kilku użytkowników... 21.10.2013, 13:32:27
Foxx Ok, dzięki. Przyjmę takie rozwiązanie, ale jeszcze... 21.10.2013, 13:50:40
Ghost_78 W SF2 rozwiazywalem to w taki sposob ze robilem re... 21.10.2013, 16:27:14
Foxx Po namyśle wydaje mi się, że wiem jak to rozwiążę.... 23.10.2013, 22:20:31 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 05:48 |