Как правильно вызывать несколько сервисов при весенней загрузке? - PullRequest
0 голосов
/ 20 марта 2020

Предположим, у меня есть сервис, который позволяет пользователям давать очки другому пользователю. Таким образом, чтобы отправить несколько баллов указанному пользователю c, ему необходимо знать, какая учетная запись будет отправляться, а какая отправляется. Таким образом, я создаю еще один сервис, отвечающий за поиск аккаунта по его идентификатору. Все работает нормально, но мне просто интересно, как правильно это сделать или как лучше это делать. У меня на уме 3 стратегии.

Вот как это выглядит:

  1. Пусть контроллер вызывает службу поиска учетных записей и передает ее службе отправителя.
    // a method in Controller class
    @RequestMapping("/transactions")
    public ResponseEntity<?> sendNuggerPoint(Long senderId, Long receiverId, Long amountOfNugger){
        Optional<Account> sender = accountService.getAccountById(senderId);
        Optional<Account> receiver = accountService.getAccountById(receiverId);
        if(sender.isPresent()&&receiver.isPresent()){
            try {
                transactionService.transferNuggerPointToAccount(sender.get(), receiver.get(), amountOfNugger);
            }
            catch(InsufficientNuggerPointException e){
                return new ResponseEntity<>(e.getMessage(),HttpStatus.BAD_REQUEST);
            }
        }
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
    // a method in Service class
    public void transferNuggerPointToAccount(Account senderAccount, Account receiverAccount,Long amountOfNugger) throws InsufficientNuggerPointException{ 
        // get both account yum yum nugger
        Long senderCurrentNugger = senderAccount.getNuggerPoint();
        Long receiverCurrentNugger = receiverAccount.getNuggerPoint();
        if(senderCurrentNugger < amountOfNugger) {
            // throw exception if sender nugger is insufficient
            throw new InsufficientNuggerPointException("Sorry, insufficeint nugger point.");
        }
        senderAccount.setNuggerPoint(senderCurrentNugger - amountOfNugger);
        receiverAccount.setNuggerPoint(receiverCurrentNugger + amountOfNugger);
    }
Просто пропустите Id отправителя и получателя и позвольте службе отправителя позвонить в службу поиска учетных записей.
    // a method in Controller class
    @RequestMapping("/transactions")
    public ResponseEntity<?> sendNuggerPoint(Long senderId, Long receiverId, Long amountOfNugger){

        if(sender.isPresent()&&receiver.isPresent()){
            try {
                transactionService.transferNuggerPointToAccount(senderId, receiverId, amountOfNugger);
            }
            catch(InsufficientNuggerPointException e){
                return new ResponseEntity<>(e.getMessage(),HttpStatus.BAD_REQUEST);
            }
        }
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
    // a method in Service class
    public void transferNuggerPointToAccount(Long senderId, Long receiverId,Long amountOfNugger) throws InsufficientNuggerPointException{ 
        // get both account yum yum nugger
        Optional<Account> sender = accountService.getAccountById(senderId);
        Optional<Account> receiver = accountService.getAccountById(receiverId);
        if(sender.isPresent() && receiver.isPresent()){
            Long senderCurrentNugger = sender.get().getNuggerPoint();
            Long receiverCurrentNugger = receiver.get().getNuggerPoint();
            if(senderCurrentNugger < amountOfNugger) {
                // throw exception if sender nugger is insufficient
                throw new InsufficientNuggerPointException("Sorry, insufficeint nugger point.");
            }
            senderAccount.setNuggerPoint(senderCurrentNugger - amountOfNugger);
            receiverAccount.setNuggerPoint(receiverCurrentNugger + amountOfNugger);
        }
    }
Создать другую сущность и позволить пользователю отправлять всю информацию в теле запроса
    // a method in Controller class
    @RequestMapping("/transactions")
    public ResponseEntity<?> sendNuggerPoint(@RequestBody Transaction transaction){
        try {
            transactionService.transferNuggerPointToAccount(transaction.getSender(), transaction.getReceiver(), transaction.getAmoutOfNugger());
        }
        catch(InsufficientNuggerPointException e){
            return new ResponseEntity<>(e.getMessage(),HttpStatus.BAD_REQUEST);
        }
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
    // a method in Service class
    public void transferNuggerPointToAccount(Account senderAccount, Account receiverAccount,Long amountOfNugger) throws InsufficientNuggerPointException{ 
        // get both account yum yum nugger
        Long senderCurrentNugger = senderAccount.getNuggerPoint();
        Long receiverCurrentNugger = receiverAccount.getNuggerPoint();
        if(senderCurrentNugger < amountOfNugger) {
            // throw exception if sender nugger is insufficient
            throw new InsufficientNuggerPointException("Sorry, insufficeint nugger point.");
        }
        senderAccount.setNuggerPoint(senderCurrentNugger - amountOfNugger);
        receiverAccount.setNuggerPoint(receiverCurrentNugger + amountOfNugger);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...