Недавно я начал программировать на Vert.x с помощью Kotlin, этот вопрос является общим для любой технологии, с которой мы используем инструментарий Vertx. Я создал свои статьи, но в них у меня есть бизнес-логика, и я хотел бы знать, что является лучшей практикой:
1. Разделить логику на независимый класс, создать ее экземпляр в статье и выполнить ее операции. , оставляя только вертикалку для получения и доставки сообщений на eventBus.
2. Реализация по возможности логики в той же вертикалке.
Ниже я покажу пример того, как код был, но, как вы можете видеть, это логика внутри самой вертикали. Это хорошо с точки зрения дизайна, или вы должны отнести его к независимому классу и оставить этот шаблон только для операций приема и отправки сообщений на шине
class MyAPIAgentImpl(vertx: Vertx) : CoroutineVerticle() {
var httpClient = HttpClient(vertx)
var apiConfig: JsonObject = Config.get().getJsonObject("myapi")
override suspend fun start() {
vertx.eventBus().consumer<JsonObject>(BusChannel.MY_API_CHANNEL) {
message -> launch { message.reply(findElem(message.body().getLong("Id"),
message.body().getString("countryCode"))) }
}
}
override suspend fun findElem(Id: Long, countryCode: String): String {
var hashMap = HashMap<String, String>()
hashMap.put("Accept", "*/*")
hashMap.put("Authorization", "Bearer XXXX")
val baseUrl: String = apiConfig.get("apiBaseUrl")
val port: Int = apiConfig.get("apiPort")
val apiRelativeUrl: String = apiConfig.get("apiRelativeUrl")
val resp: HttpResponse = httpClient.GET(String.format(baseUrl, countryCode), port,
String.format(apiRelativeUrl, Id), hashMap, apiConfig.getLong("requestTimeout"))
if (resp.status == HttpCode.OK) {
return resp.message.get("msg")
} else {
logger.error("[HTTP CALL] My API response with error status code: ${resp.status}")
throw ApiException(ErrorMessage(-1, resp.status, "Error calling external API"))
}
}
companion object {
private val logger = LoggerFactory.getLogger(MyAPIAgentImpl::class.java)
}
}
Я хотел бызнать ваши комментарии и опыт в этом отношении при разработке приложений с Vertx