2017-08-19 16 views
0

私は春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を拡張してより多くのコントローラを持っています。これは正しいアプローチですか?デザインに何か悪いことはありますか?

+0

コントローラはサービスとは異なります。 BaseControllerの名前をBaseServiceに変更し、ServiceクラスがBaseサービスを拡張して共通サービスにアクセスできるようにします。多くのアプリケーションで共通のエンドポイントが多数ある場合は、全く別の質問です。 – Barath

答えて

2

私の謙虚な意見では、コントローラをコントローラとサービス部分(アプリケーションの重い持ち上げとビジネスロジック)を行うようにするのがよい方法です。 1つのクラスでコントローラとサービスを詰め込もうとしないでください。

一般的なプラクティスは、コントローラクラスをきれいにすることです。基本サービスクラスから拡張されたさまざまなサービスクラスを指すさまざまなコントローラメソッドを追加できます。それを試してみてください。あなたのコードははるかにきれいに見えます。