私は春4のWebアプリケーションを開発しています。それらの下では、ほとんどのコントローラが同じサービスを使用します。だから私はそれらの共通のサービスを全て共通のコントローラに移し、実際のコントローラからそれを拡張することを計画しました。すべての基本的なautowiredサービスの基本コントローラー
ここに私のクラスがあります。
BaseController.java
class BaseController {
final static Logger _log = Logger.getLogger(BaseController.class.getName());
public BaseController(IInstitutionService institutionService, IAccessService accessService, IUserService userService, ICostCenterService costCenterService, HttpServletRequest request, ModelMapper modelMapper, IAssetService assetService) {
this.institutionService = institutionService;
this.accessService = accessService;
this.userService = userService;
this.costCenterService = costCenterService;
this.request = request;
this.modelMapper = modelMapper;
this.assetService = assetService;
}
private final IInstitutionService institutionService;
private final HttpServletRequest request;
final IAccessService accessService;
final IUserService userService;
final ICostCenterService costCenterService;
final ModelMapper modelMapper;
final IAssetService assetService;
//common methods
}
TransferController.java上記のよう
@Controller
@RequestMapping("myrequests/transfer")
public class TransferController extends BaseController {
final static Logger _log = Logger.getLogger(TransferController.class.getName());
private final ITransferService transferService;
@Autowired
public TransferController(IInstitutionService institutionService, IAccessService accessService, IUserService userService, ICostCenterService costCenterService, HttpServletRequest request, ModelMapper modelMapper, IAssetService assetService, ITransferService transferService) {
super(institutionService, accessService, userService, costCenterService, request, modelMapper, assetService);
this.transferService = transferService;
}
@RequestMapping(path = "new", method = RequestMethod.GET)
public String createRequest(ModelMap model) {
TransferRequest transferRequest = new TransferRequest();
User loggedInUser = userService.findByUserId(getPrincipal());
transferRequest.setRequesterContactNo(loggedInUser.getExtension());
transferRequest.setRequesterEmail(loggedInUser.getEmail());
model.addAttribute("transferRequest", transferRequest);
model.addAttribute("hodList", accessService.listUserByType(UserProfileType.HOD.getName(), getInstitution().getId()).stream().collect(Collectors.toMap(User::getUserId, User::getFullName)));
model.addAttribute("userList", accessService.listUserByType(UserProfileType.USER.getName(), getInstitution().getId()).stream().collect(Collectors.toMap(User::getUserId, User::getFullName)));
model.addAttribute("costCenterList", costCenterService.list().stream().collect(Collectors.toMap(CostCenter::getNo, CostCenter::getName)));
model.addAttribute("assetDTOList", assetService.listByUser(getPrincipal(), getInstitution().getCode()).stream().map(asset -> modelMapper.map(asset, AssetDTO.class)).collect(Collectors.toList()));
return "newtransferrequest";
}
}
私はBaseControllerを拡張してより多くのコントローラを持っています。これは正しいアプローチですか?デザインに何か悪いことはありますか?
コントローラはサービスとは異なります。 BaseControllerの名前をBaseServiceに変更し、ServiceクラスがBaseサービスを拡張して共通サービスにアクセスできるようにします。多くのアプリケーションで共通のエンドポイントが多数ある場合は、全く別の質問です。 – Barath