gpt4 book ai didi

java - 错误代码或异常 : How to communicate errors from model to controller in my case?

转载 作者:行者123 更新时间:2023-12-01 11:41:36 24 4
gpt4 key购买 nike

在我的服务层中,我有一种将用户登录到系统的方法。此方法接收 3 个参数:字符串用户名字符串密码int roleId

我需要在我的服务层中执行多项检查:

  • 系统中存在一个带有username 参数的用户
  • 用户的密码与密码参数匹配。
  • 系统中存在带有roleId 参数的角色
  • 用户可以通过roleId参数访问角色
  • 用户未锁定。...

如果这些检查中的任何一个失败,那么服务层应该告诉 Controller 登录失败以及失败的原因。
如果所有这些检查都通过,那么服务层应该告诉 Controller 登录已通过。

我担心的是,如果检查失败,我如何将其从服务层传递到 Controller 。我应该抛出异常吗?或者我应该发送错误代码?

我想我有以下选择:

选项 1:

每当检查失败时抛出异常。所以我的服务方法可能是:

public void login(String username, String password, int roleId) throws UserServiceException;

这可能是逻辑:

boolean check1Flag = isUserExist(username);
if (!check1Flag) {
throw new UserServiceException("No user exist with username '" + username + "'");
}
...

选项 2:

每当检查失败时发送错误代码。如果所有这些检查都通过,则发送 0 作为代码。所以我的服务方法可能是:

public int login(String username, String password, int roleId) throws UserServiceException;

这可能是逻辑:

boolean check1Flag = isUserExist(username);
if (!check1Flag) {
return -1; // -1 means No user exist with username paramter
}
...

选项 3:

每当检查失败时发送false。如果所有这些检查都通过,则发送 true。所以我的服务方法可能是:

public boolean login(String username, String password, int roleId) throws UserServiceException;

这可能是逻辑:

boolean check1Flag = isUserExist(username);
if (!check1Flag) {
return false;
}
...

选项 3 看起来很干净,但我不知道如何通知 Controller 在这种情况下发生了哪个错误。

还有其他选择吗?对于这种情况有没有普遍接受的设计指南?

谢谢

最佳答案

我认为这取决于你是否需要 Controller 中的信息。

例如,如果它是某种网站,并且登录 Controller 只会向用户显示“登录失败”屏幕,那么我会选择选项 3 。如果您愿意,您还可以在服务层中记录错误。

如果您需要登录 Controller 针对不同的错误采取不同的行为。例如,如果说“您没有该角色”或“您的帐户已锁定”,那么我会选择选项 2。也许您可以制作一个响应枚举或类似的东西来代替整数以使代码清晰。

我不会选择选项 1,因为我不喜欢使用异常来处理常见场景。另外,由于您想知道 Controller 中发生了什么,因此您需要在异常中添加一些整数或枚举代码,或者解析异常消息。

关于java - 错误代码或异常 : How to communicate errors from model to controller in my case?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29478502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com