Граница слоя — это чётко определённая точка раздела между функциональными уровнями системы, через которую происходит взаимодействие между слоями.
Зачем нужны границы слоёв?
- Инкапсуляция и защита. Граница предотвращает утечку внутренней реализации одного слоя в другой.
- Модулярность. Чёткие границы упрощают замену или изменение внутренней логики слоя без затрагивания остальной системы.
- Тестируемость. С помощью контрактов на границах легко создавать моки и стабы для модульных тестов.
- Разделение ответственности (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
Автор::