Encje obiektów o różnych typach - klasy DTO - polimorfizm?

0

W celu nauki Angulara 2 i Springa tworzę po godzinach aplikację wspomagającą proces szkolenia kolarzy. Założenia tej aplikacji są następujące:

Administrator

  1. Zarządza klubem (klubami), zawodnikami i trenerami
  2. Zarządza programami szkoleniowymi i ćwiczeniami
  3. Może wszystko

Trener

  1. Tworzy indywidualne plany treningowe dla zawodników
  2. Tworzy szablony planów treningowych i wprowadza ćwiczenia
  3. Akceptuje lub odrzuca sugestie zawodników, widzi ich sesje treningowe

Zawodnik

  1. Wprowadza sesje treningowe ze szczegółami
  2. Widzi swój plan ułożony przez trenera i przypisuje treningi
  3. Czyta i pisze prywatne wiadomości do trenera lub do zespołu

Czy tworzyć 3 osobne encje Admin, Coach, Cyclist? Zalet jest kilka:

  1. Tak będzie czytelniej w kodzie. Wiemy, kto jest kim.
  2. Powyższe encje mają swoje oddzielne pola.

Ale jest też kilka wad:

  1. Wszyscy muszą się jakoś logować - login, hasło, cokolwiek
  2. Mają też wiele innych wspólnych cech - trzeba dublować pola

Polimorfizm? Stworzyć klasę User, a po niej dziedziczyliby Admin, Coach, Cyclist. Czy takie rozwiązanie jest idealne? A jeśli trener lub admin będzie jednocześnie zawodnikiem? Oczywiście mogą mieć osobne konta, ale to też nie jest takie wygodne. Nawet gdyby zastosować polimorfizm i rzutować z User na Admin w razie potrzeby, czy można wymusić, żeby User nie dał się zrzutować, jeśli nie będzie adminem (czyli np. miał user.type==UserType.ADMIN)?

Chcę wprowadzić pewną innowację, czyli zespoły oparte o SCRUM, więc każdy sobie będzie trenerem, a nad wszystkimi będzie czuwał lider grupy. Tutaj sytuacja się komplikuje.

Jaka architektura będzie najlepsza jeśli chodzi o klasy DTO w Javie i encje w bazie? Prawdopodobnie wykorzystam ORM-a wbudowanego w Springa do obsługi bazy danych.

1

cos w ten desen?

    final class User {
        private final String name;
        private final Iterable<Role> roles;
    }

    enum Role {
        Admin, Coach, Cyclist
    }

plus oczywiscie sprawdzanie aby stwierdzic czy dana komenda (funkcjonalnosc) powinna byc aktywna dla zalogowanego usera na podstawie jego rol

0

User i ManyToMany z Role :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1