java 在服务层或DAO层中,我应该在哪里验证用户名是否是唯一的?[关闭]

lawou6xi  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(142)

已关闭,该问题为opinion-based,目前不接受回答。
**想改进这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

3天前关闭。
Improve this question
如果我的数据库不允许重复的用户名,我应该:

//1-validate in the service layer like: 

public User saveUser(User user){ 
     if(repoUser.findByUsername(user.getUserName())!=null) 
         throw new RuntimeException("username already exists"); 
     return repoUser.save(user);
}

//2-capture the repoUser exception in the service and throw it as a service exception
 public User saveUser(User user){ 
     try{ 
        return repoUser.save(user);
     }catch(DAOException e){ 
         throw new RuntimeException(e.getMessage()); 
 }
bvn4nwqk

bvn4nwqk1#

我不知道你的代码是如何组织的,但理想情况下你需要一个仓库和一个DAO,仓库是检查副本的组件。DAO存储数据并直接访问实体,而存储库则充当DAO和控制器之间的中间人。在此之上,控制器将确保接收到的数据的有效性(例如,get方法的有效id,create/update方法的非空dto...)。最后,存储库将添加额外的验证层,例如,在您的情况下,检查是否有重复,或者接收到的id是否在get调用中有相应的实体。希望这对您有所帮助。

lf5gs5x2

lf5gs5x22#

这两种方法都没有效率。除非您需要灵活性和可配置性,否则您对数据的约束应该存在于根目录中。数据库中的用户名字段应该标记为UNIQUE,当您插入新记录时,检查是否违反约束。如果存在重复的名称,您应该能够从那里处理它,并向用户显示相应的错误。
通常情况下,你不应该在任何层中捕获异常,让它传播到服务。为异常创建一个对应的Map,前端处理它。

相关问题