@RequestMapping(value = "/products/create", method = RequestMethod.POST)
public ModelAndView create(@Valid ProductForm productForm, BindingResult bindingResult,
HttpServletRequest request) {
SessionContext sessionContext = (SessionContext) request.getAttribute("sessionContext");
ModelAndView mav = new ModelAndView("products/new");
mav.addObject("errors", bindingResult.getAllErrors());
mav.addObject("productForm", productForm);
int newProductId = -1;
if (!bindingResult.hasErrors()) {
List<Product> products = productService.find...(...);
if (products != null...) {
bindingResult.addError(new ObjectError("Products", "..."));
}
// only try and create if no errors so far
if (!bindingResult.hasErrors()) {
newProductId = productService.create(..., productForm);
if (newProductId <= 0) {
bindingResult.addError(new ObjectError("Products", "..."));
}
}
}
if (bindingResult.hasErrors()) {
return mav;
}
return new ModelAndView("redirect:/products/show/" + newProductId);
}
上記の説明では、UI MVSの側面について説明しています(Spring MVCを使用)。サービス層の設計、権限の確認場所、UI層の処理方法
ここでは、サービスレイヤをどのように設計する必要があるのですか。この例では、ProductServiceImplには、製品を作成してデータベースに保持するcreateメソッドがあります。最初にチェックすることにより、UI層でこれに
私はなど、ユーザーの役割に基づいて、パーミッションをチェックする必要があり
に私は可能性があり、ユーザーが製品を作成するための権限を持っている場合:
if(permissionService.hasPermission(.....)) {
newProductId = productService.create(....)
}
public class ProductServiceImpl implements ProductService {
@Autowired
PermissionService permissionService;
..
@Override
public int create(...., final ProductForm productForm) {
boolean canCreateProduct = productService.hasPermissions(.....);
if(canCreateProduct) {
Product product = ..... (productForm);
productDao.save(product);
return product.getId();
}
}
}
しかし、私のpならば、私は理解できない問題がある。しかし、UI層へのこの絆このロジックは、私はそれが作成する方法そのものであるべきだと思いますあなたがこれを行うための権限を持っていないことをUIレイヤーにどのように報告すればよいですか?ProductServiceImpl.createメソッドのパーミッションチェック?
例外をスローする必要があると言うと、実行する必要のあるさまざまなチェックに基づいて処理するために非常に多くの例外が発生するため、UIレイヤーが非常に乱雑に見えます。
ここで何をしていますか?
私はAOPに精通していません。このアプリケーションは、これらのチェックの点でかなり軽いので、サービスレイヤやUIなどに入れてください。 – Blankman
あなたの質問で既に提案したように、 'create'メソッドのチェックと失敗したチェック時に例外をスローすることが最良の選択肢です。 – Torious
okこれは意味をなさないようになっています。最初にページが読み込まれるのを防ぐためにパーミッションチェックを行いますが、例外をスローすると試行してバイパスしても、それはレアケースになるので問題ありません。 – Blankman