Граница слоя — это чётко определённая точка раздела между функциональными уровнями системы, через которую происходит взаимодействие между слоями.

Зачем нужны границы слоёв?

  • Инкапсуляция и защита. Граница предотвращает утечку внутренней реализации одного слоя в другой.
  • Модулярность. Чёткие границы упрощают замену или изменение внутренней логики слоя без затрагивания остальной системы.
  • Тестируемость. С помощью контрактов на границах легко создавать моки и стабы для модульных тестов.
  • Разделение ответственности (SoC). Каждый слой решает свои задачи — границы помогают не перепутать, где чья ответственность.

Как задавать и поддерживать границы:

  • Интерфейсы и абстракции: определяют контракт взаимодействия.
  • Модульное разделение: использование пакетов, модулей, подпроектов.
  • Модификаторы доступа: public / package-private / private для классов и методов.
  • Документация: API спецификации, схемы архитектуры, описание контрактов.
  • Автоматические проверки: архитектурные линтеры (ArchUnit, SonarQube), CI правила.

Пример: граница между сервисом и репозиторием

// Интерфейс репозитория – граница слоя данных
public interface FilmRepository {
    List<Film> findAll();
    Optional<Film> findById(Long id);
}
 
// Сервис определяет свой API – граница слоя бизнес-логики
public class FilmService {
    private final FilmRepository repository;
 
    public FilmService(FilmRepository repository) {
        this.repository = repository;
    }
 
    public List<Film> getAllFilms() {
        return repository.findAll();
    }
 
    public Film getFilm(Long id) {
        return repository.findById(id)
            .orElseThrow(() -> new FilmNotFoundException(id));
    }
}

Мета информация

Оtбласть:: 00 Архитектура ПО
Родитель:: Архитектурный слой
Источник::
Создана:: 2025-04-29
Автор::

Дополнительные материалы

Дочерние заметки