已关闭,该问题为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());
}
2条答案
按热度按时间bvn4nwqk1#
我不知道你的代码是如何组织的,但理想情况下你需要一个仓库和一个DAO,仓库是检查副本的组件。DAO存储数据并直接访问实体,而存储库则充当DAO和控制器之间的中间人。在此之上,控制器将确保接收到的数据的有效性(例如,get方法的有效id,create/update方法的非空dto...)。最后,存储库将添加额外的验证层,例如,在您的情况下,检查是否有重复,或者接收到的id是否在get调用中有相应的实体。希望这对您有所帮助。
lf5gs5x22#
这两种方法都没有效率。除非您需要灵活性和可配置性,否则您对数据的约束应该存在于根目录中。数据库中的用户名字段应该标记为UNIQUE,当您插入新记录时,检查是否违反约束。如果存在重复的名称,您应该能够从那里处理它,并向用户显示相应的错误。
通常情况下,你不应该在任何层中捕获异常,让它传播到服务。为异常创建一个对应的Map,前端处理它。