Я создаю компонент, который выполняет некоторые налоговые расчеты. Я создал два модуля Maven tax-utility-api
и tax-utility-impl
.
tax-utility-api
содержит интерфейсы для компонента
public int getTaxableIncome (int доход);
и tax-utility-impl
содержит фактические реализации
public int getTaxableIncome (int доход) {
// некоторый код
}
Причина, по которой я разделил интерфейсы и реализации на разные JAR-файлы, заключалась в том, что другие компоненты будут зависеть только от api
(контрактного) JAR-кода для разработки кода в их конце. И impl
JAR потребуется только во время выполнения.
Но когда я попытался создать тестовый компонент, который зависит от api
JAR этого компонента, я понял, что не могу использовать функции, поскольку они являются интерфейсами, а не конкретными методами. Поэтому вместо этого в зависимости от impl
я могу использовать функции компонента.
Это меня смутило, и у меня есть два вопроса:
- Во-первых, чтобы другие компоненты зависели от интерфейсов в моем
api
JAR, нужна ли мне инфраструктура DI, такая как Spring?
- Неужели я неправильно понял реальную выгоду / цель разделения интерфейсов (контракта) и реализации на разные модули / JAR-файлы?
Спасибо за чтение.