Написание кода уровня сервиса на основе того, где сервис вызывается в контроллере - PullRequest
1 голос
/ 19 января 2020
@Service
public class FooService {
      public boolean doFoo(List fooList) {
           //Code calling List without checking for null, possible NPE
           Integer id = fooList.get(0).getId();
           //more code
      }
}



@Service
public BarController {
        @Autowired 
        FooService foo;

  public bar(Optional<Compound> optCompound) {
     if (optCompound.isPresent()) {   
        List barList = optCompound.setList(new ArrayList<>());

        //sending List Over to FooService
        Boolean isFooDone = foo.doFoo(barList);
     }   
}

Должен ли я проверить список на нулевое значение в сервисном коде здесь?

Integer id = fooList.get(0).getId();

Только на основании предположения, что вызов службы сделан в контроллере, где список уже инициализирован с пустым списком ArrayList?

List barList = compound.setList(new ArrayList<>());

Или код службы должен быть написан независимо от контроллер?

1 Ответ

1 голос
/ 20 января 2020

Сервисный код должен быть написан независимо от того, что контроллер делает всю архитектуру слабо связанной. Так что в будущем, если вы захотите изменить какую-либо бизнес-логику c, она может быть изменена независимо от контроллера.

Кроме того, контроллер должен перенаправлять запросы только на основе требования для дальнейшей обработки на несколько слои.

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

Любая инструкция, связанная к бизнес-логике c должен быть частью сервисного уровня, а не контроллера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...