我正在构建一个使用服务 API 的 UI 客户端,该服务 API 在幕后使用 Web 服务。其中一项 API 服务如下所示:
interface UserService {
List<User> findUsers(User loggedInUser, UserSearchParameters searchParameters, PagingParameters pagingParameters) throws AuthenticationFault, InvalidIndexFault;
void removeUser(User loggedInUser, User userToRemove) throws AutheticationFault;
void addUser(User loggedInUser, User newUser) throws AuthenticationFault;
}
loggedInUser 是代表调用该方法的用户。AuthenticationFault 是一个检查异常。大约有 20 个这样的服务接口。我想做的是实现一个隐藏loggedInUser参数和AuthenticationFault异常的外观。外观实现将使用当前登录客户端的用户调用这些方法。
我也想对其他检查的异常进行一些清理。如您所见,当客户端尝试检索页面 -1 时会引发 InvalidIndexFault 异常,但这是程序员错误,我不想将其作为已检查异常。
目前我所做的总是为我不喜欢的异常重新抛出一个 RuntimeException,但如果我后来改变主意,那么以后需要做很多工作来改变它。这也感觉像是代码重复。其他程序员刚刚吞下了异常并将它们记录下来,这太可怕了。大多数情况下,如果出现异常,我想将其冒泡到显示错误的 ui 中的错误处理程序。
我想到了一些解决方案:
- Java 动态代理
- 代码生成
我还没来得及尝试这些解决方案,我想我不妨先在这里问一下。你建议我如何实施这个?环境是 Java 6,构建工具是 Maven 3,如果有帮助的话。
PS。如果您回答这个问题,请多说“选择 2” :) 欢迎任何提示和其他实施细节。
澄清一下,检索当前登录的用户不是问题,因此您不必帮助我。我目前将其隐藏在接口后面并使用 IoC 将其注入。在幕后它使用 ThreadLocals