Я пытаюсь ознакомиться с модульной системой, представленной в Java 9, и мне хотелось бы узнать, как лучше ее использовать.
Для библиотеки, которую я пишу, я хотел бы сделать следующее (игнорировать именование пакетов):
- Предоставлять только интерфейсы, простые классы POJO и классы фабрикичерез
com.myproject.api
.Все в этом классе может быть использовано пользователями. - Поместите реализацию интерфейсов в
com.myproject.core
.Пользователи не должны иметь доступа к чему-либо здесь.
Я рассуждаю так: пользователям не нужно запутываться или перегружаться логикой реализации.Вместо этого они могут просто посмотреть (надеюсь) на чистые и хорошо документированные интерфейсы.
Однако из-за того, как работают пакеты Java, может быть сложно ограничить использование определенных классов, не делая их все пакеты закрытыми.Но я не люблю складывать все классы в один пакет, а скорее организовывать их в разные пакеты.
После прочтения о модульной системе я считаю, что могу сделать следующее, чтобы добиться того, чего я хочу.Это файл module-info.java
:
module com.myproject {
exports com.myproject.api;
}
Насколько я понимаю, пользователи моей библиотеки смогут использовать все, что определено в пакете com.myproject.api
(используя require com.mypojrect.api
в своем собственном модуле -информационный файл).
Но могут ли пользователи получить доступ к чему-либо в пакете com.myproject.core
?У меня нет проблем с их просмотром кода (через IDE или сам исходный код), но я просто не хочу в конечном итоге поддерживать классы / методы / логику, которые я не хотел раскрывать.
Я обеспокоен тем, что пользователи, у которых нет модульного приложения, или пользователи, которые помещают мою библиотеку JAR в путь к классам, каким-то образом найдут способ получить доступ к предполагаемому ограниченному пакету.
Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация.