рефакторинг сервисного метода
От: brunoid  
Дата: 29.04.15 06:16
Оценка:
Проект построен на Spring 4 Framework.

В сервисном методе нужно проверить или пользователь обладает необходимыми разрешениями для выполнения бизнес логики

Вот примерный код который сейчас это делает:

void processProduct() {

        if (!SecurityUtils.hasRole("PERMISSION_UPDATE_ANY_PRODUCT")) {
            if (SecurityUtils.hasRole("PERMISSION_UPDATE_OWN_PRODUCT")) {
                if (!product.getAuthor().equals(user)) {
                    throw new AccessDeniedException("Access denied, you don't have permission to update other's products");
                }
            } else {
                throw new AccessDeniedException("Access denied, you don't have permissions to update products");
            }
        }

        if (product.getParent() != null) {
            Long parentProductId = product.getParent().getId();
            Product siblingProduct = productDao.findChildProductByName(parentProductId, name);
            if (siblingProduct != null) {
                if (!siblingProduct.equals(product)) {
                    throw new ProductAlreadyExistsException("Parent product already contains a child product with a given name");
                }
            }
        }
.....

doSomeRealBusinessLogic();

}


Здесь проверяется или у пользователя есть разрешение — PERMISSION_UPDATE_ANY_PRODUCT и если есть то все ок, если нету то проверяется или есть разрешение PERMISSION_UPDATE_OWN_PRODUCT и если есть то принадлежит ли Продукт пользователю который пытается совершить над ним действие.

Затем вторая проверка проверяет или еще не содержится такого продукта с таким же именем у отцовского продукта(продуты в системе композитные)

Как можно отрефакторить этот метод и убрать проверки из сервисного метода во что то извне ?
Отредактировано 29.04.2015 6:31 Blazkowicz . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.