В основном в моем приложении для Android есть некоторые метаданные, которые необходимо сообщать на внутренний сервер в различных сценариях:
data class SearchMetaData(
val searchId: String?,
val isRateLimit: Boolean
)
Чтобы сделать код чистым, я приведу минимальный случай следующим образом.Вся логика отчета аналогична, каждая из функций subscribe
провайдера метаданных и получает значение, о котором нужно сообщить.
fun logEvent1() {
fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
...//lots of other events data here
val sessionMetadata = SessionMetadata()
sessionMetadata.id = metadata.searchId
sessionMetadata.limiit = metadata.isRateLimit
event1.session = sessionMetadata
...
report(event1)
})
}
fun logEvent2() {
fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
...//lots of other events data here
val sessionMetadata = SessionMetadata()
sessionMetadata.id = metadata.searchId
sessionMetadata.limiit = metadata.isRateLimit
event2.session = sessionMetadata
...
report(event2)
})
}
fun logEvent3() {
fetchMetaData().observeOn(schedulers.mainThread()).subscribe({ metadata ->
...//lots of other events data here
val sessionMetadata = SessionMetadata()
sessionMetadata.id = metadata.searchId
sessionMetadata.limiit = metadata.isRateLimit
event3.session = sessionMetadata
...
report(event3)
})
}
Меня беспокоит каждый раз, когда мы меняем схему метаданных, нам нужнообновить все logEventX
, мне было интересно, если бы мы могли извлечь все subscribe
в различных функциях и получить метаданные?