Что такое Service в контексте архитектуры программных систем?

«Что такое Service в контексте архитектуры программных систем?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Service (сервис) — это независимый, автономный программный компонент, который инкапсулирует определенную бизнес-логику или функциональность и предоставляет к ней доступ через четко определенный интерфейс (обычно API).

Основные цели и характеристики:

  • Инкапсуляция логики: Скрывает внутреннюю реализацию, предоставляя контракт для взаимодействия.
  • Повторное использование: Одним сервисом могут пользоваться разные клиенты (другие сервисы, фронтенд).
  • Независимое развертывание и масштабирование: Каждый сервис можно обновлять, масштабировать и выводить из строя независимо от других.
  • Явно определенные зависимости: Зависимости от других сервисов или инфраструктуры четко декларируются.

Практический пример (микросервис):

// Сервис для управления пользователями
@RestController
@RequestMapping("/api/users")
public class UserService {
    @Autowired
    private UserRepository repository;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return repository.findById(id).orElseThrow();
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public User createUser(@RequestBody User user) {
        return repository.save(user);
    }
}

В архитектуре микросервисов сервис является основной единицей развертывания, в SOA — единицей повторного использования.