Правильность проектирования классов Java
Подскажите, правильный ли подход выбран к проектированию классов пользователей. Есть пользователи, которые делятся на: админ, тренер, студент. У всех есть общие поля, такие как имя, логин и возраст и т.п. У конкретного типа юзера есть особенные поля. Подскажите правильным ли путем я пошел.
- Создал абстрактный класс с общими данными для каждого юзера.
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;
}
- Создал общий интерфейс
Entity, который говорит нам что это сущность (далее будет нужна для создания абстрактного класса репозитория для доступа к базе данных)
public interface Entity {
long getId();
void setId(long id);
}
- Дополнительные роли, такие как тренер и студент, разнес по отдельным классам, наследовал их от абстрактного юзера, и добавил им доп. поля:
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;
}