と にある種のコードを含めることの境界線はどこにあるのかという質問がController
ありService
ます。ビジネスロジックを間違った場所に含めたと思います。リファクタリングしたい例をお見せしましょう。これは、lists
(currentRoles, pendingOfAuthRoles..etc)
ユーザー ロールを更新するために受け取るハンドラー メソッドの一部です。
//Insert new roles
List<Role> storedRoles = userService.getRoles(username);
List<Role> newAcceptanceRoles = new ArrayList<Role>();
for(Role role : currentRoles){
if(!storedRoles.contains(role)){
if(roleService.getPolicies(role.getRoleName()).size()>0){
userService.insertRole(username, role.getRoleName(), true, false);
newAcceptanceRoles.add(role);
}else{
userService.insertRole(username, role.getRoleName(), true, true);
}
}
}
if(!newAcceptanceRoles.isEmpty())
mailService.sendRoleAcceptanceEmail(ControllerUtils.getBaseURL(httpServletRequest), username, newAcceptanceRoles.toString(), userService.getUserByUsername(username).getEmail());
コードのこの部分では、ユーザーとロールの間に新しい関係を挿入します。一部のロールには管理者権限が必要なため、テーブルには、ビューを介して現在のユーザー ロールとしてUSER_ROLE
ロールを含めないようにするためのフラグがあります。authorized=0
ロールがユーザー ロールとして保存されていない場合は、auth フラグを に設定して挿入しますfalse
。さらに、ロールに承認が必要な場合は、管理者に電子メールが送信されます。
次のようなサービスメソッドが必要ですか...
updateUserRoles(currentRoles, pendingOfAuth, pendingOfAccept)
この種の作業をサービスで行うかどうか。