Учитывая программную систему, написанную на Java, состоящую из трех слоев, A → B → C, то есть слой A использует уровень B, а B использует слой C.
Я хочу, чтобы класс одного уровня имел доступ только к классам одного и того же уровня или к его прямой зависимости, то есть B должен иметь доступ к C, но не A. Также A должен иметь доступ к B, но не C.
Есть ли простой способ обеспечить такое ограничение? В идеале я хочу, чтобы eclipse сразу жаловался, если вы пытаетесь получить доступ к классу неправильного уровня.
В настоящее время в программном обеспечении используется maven. Поэтому я попытался поместить A, B и C в разные модули maven и правильно объявить зависимости. Это прекрасно работает, чтобы предотвратить доступ B к A, но не препятствует доступу A к C.
Далее я попытался исключить C из зависимости от B. Это теперь также предотвращает доступ с A до C. Однако теперь я больше не могу использовать зависимости от копирования для сбора всех транзитивных зависимостей, необходимых для времени выполнения.
Есть ли хороший способ, который позволяет мне чистое разделение слоев, но также позволяет мне собирать все необходимые зависимости времени выполнения?