Привет, сообщество StackOverflow!
Я пытаюсь создать библиотеку в Котлине. Я хочу иметь постоянную публичную поверхность API с несколькими реализациями для разных библиотек и общую кодовую базу, которая также должна содержать код Kotlin / JVM. Затем общедоступная поверхность API может использоваться в других проектах, а реализация выбирается во время выполнения (через путь к классам).
Например, предположим, что я хочу написать библиотеку, которую я использую для хранения данных на сервере. Внешний вид поверхности общедоступного API должен иметь метод, подобный приведенному ниже, но он также должен обрабатывать общую бизнес-логику, такую как проверка данных.
fun storeData(data: String) {
if (data.isNotEmpty()) {
actuallyStoreData(any)
} else {
throw IllegalArgumentException("data cannot be empty");
}
}
private fun actuallyStoreData(data: String) // this method should depend on the implementation
Затем я хочу реализовать эту библиотеку для двух разных баз данных: скажем, MongoDB и MySQL. Поэтому в моем проекте, который использует эту библиотеку, я обращаюсь только к общедоступному API. Когда проект запускается, реализация этой функции должна зависеть от того, находится ли my-library-mysql.jar или my-library-mongodb.jar в пути к классам.
Может быть, это странный вопрос, и я, вероятно, думаю, что это слишком сложно, но это действительно облегчило бы разработку моего проекта. Я пробовал Kotlin Multiplatform, но он не дает возможности указать общую цель JVM. Итак, есть ли способ реализовать это?