Правильность проектирования классов Java

Подскажите, правильный ли подход выбран к проектированию классов пользователей. Есть пользователи, которые делятся на: админ, тренер, студент. У всех есть общие поля, такие как имя, логин и возраст и т.п. У конкретного типа юзера есть особенные поля. Подскажите правильным ли путем я пошел.

  1. Создал абстрактный класс с общими данными для каждого юзера.
    public abstract class AbstractUser<T> implements Entity{
        private long id;
        private String login;
        private String password;
        private String fio;
        private int age;
        private Role role;
    }
  1. Создал общий интерфейс Entity, который говорит нам что это сущность (далее будет нужна для создания абстрактного класса репозитория для доступа к базе данных)
    public interface Entity {
        long getId();
        void setId(long id);
    }
  1. Дополнительные роли, такие как тренер и студент, разнес по отдельным классам, наследовал их от абстрактного юзера, и добавил им доп. поля:
   public class Student extends AbstractUser<Student> {
       private List<Group> groups = new ArrayList<>();
   }

   public class Trainer extends AbstractUser<Trainer> {
       private Map<Date, Integer> salaryMap = new TreeMap<>();
       private Group group;
}


Ответы (0 шт):