我有3个实体(用户,培训师,管理员).您认为我需要baseUser存储库吗?



我想构建一个像Udemy这样的示例应用程序。我有3个实体(用户,培训师,管理员)。我试着根据我下面提到的一些条件来申请

  • 用户可以付费购买课程(注册)。非用户教员和管理员不能购买培训。

正如我之前所说,我有3个实体和3个存储库。我已经尝试了两种方法来解决它,都成功了,但我无法选择哪一种方法最好。

  • 第一种方法是分离实体。通过这样做,当用户存储库中没有用户具有userId时,我可以确定此userId不对应于用户,或者它不是用户(它可以是trainer或admin,或者两者都不是)

  • 第二种方式是继承。我创建了一个BaseUser类

public abstract class BaseUser extends BaseEntity {
private String name;
@Enumerated(EnumType.STRING)
private EUserRole role;
}

,我创建了BaseUserRepository, UserRepository, AdminRepository和TrainerRepository继承。

public interface BaseUserRepository<T extends BaseUser> extends JpaRepository<T, UUID> { }

,我已经在注册服务中使用了这个存储库。

User user = baseUserRepository.findById(userId)
.filter(u -> u.getRole() == EUserRole.USER)
.map(u -> (User) u)
.orElseThrow(() -> new RuntimeException("User not found or not authorized"));

你认为我应该用哪种方法?我很困惑……

如果您遵循编程和系统灵活性的原则,那么对于具有共同属性的类似实体,最好有一个父类,在这种情况下,实际上,所有三个实体都是用户,我建议使用基类,因为在将来这可以帮助使系统更灵活(例如,更改用户的密码,更改名称等)

最新更新