Design patterns 如何摆脱回拨量,更好的设计?

Design patterns 如何摆脱回拨量,更好的设计?,design-patterns,kotlin,dependency-injection,dagger-2,kodein,Design Patterns,Kotlin,Dependency Injection,Dagger 2,Kodein,对于Android: 我有 具有一些基本功能的核心库:libCore。libCore是用Java编写的,包含一些基本的计算函数,不包含任何与Android相关的库,纯Java。它有一个接口,为外圈提供这些功能 一个库,使用这个核心的是什么:libModule。libModule是用Kotlin编写的,是一个Android库。libModule导入libCore并将这些基本计算组合到更复杂的函数中 最后,我的Android应用程序:myApp。myApp是一款同样用Kotlin编写的Androi

对于Android: 我有

  • 具有一些基本功能的核心库:libCore。libCore是用Java编写的,包含一些基本的计算函数,不包含任何与Android相关的库,纯Java。它有一个接口,为外圈提供这些功能
  • 一个库,使用这个核心的是什么:libModule。libModule是用Kotlin编写的,是一个Android库。libModule导入libCore并将这些基本计算组合到更复杂的函数中
  • 最后,我的Android应用程序:myApp。myApp是一款同样用Kotlin编写的Android应用程序,它只导入libModule而不是libCore。在这个级别上,我们希望隐藏libCore的内容,并且确实希望在这里看到任何libCore的内容

我有一组从libModule到myApp的回调,同时我将这些回调组合到一些包装器类。例如:

class LoginCallbackWrapper {
 internal lateinit var authenticationCallback : AuthenticationCallback
 internal lateinit var loginCallback : LoginCallback
 internal lateinit var andDozenOtherCallback: DozenOtherCallbacks

 val isAuthInitialized = fun(): Boolean{
  return ::authenticationCallback.isInitialized
 }
 //.. also for the other callbacks

}
此外,我还有其他具有组合回调的回调包装器

我希望有另一种更优雅的方式来处理这些回调?
任何设计模式,另一个库。。我听说了一些关于匕首2的事。因此,可能使用依赖项注入?

我认为对于任何可能在后台长时间运行的异步任务,您的函数似乎允许检查它们中的任何一个当前是否正在运行。。。你将不得不以某种方式对那些长期运行的任务进行簿记;保留一个引用并检查状态等。即使您将这些封装在协同程序中,您仍然需要保留一个对作业的引用才能执行该检查。。。感觉你可能被卡住了你的回电怎么了?Spring为其所有生命周期事件提供回调挂钩。这通常是事件驱动编程的本质。术语挑剔:这不是通常所说的。我也会避免使用术语集群,因为它在行业中有特定的含义(设置相同流程的多个实例以提高并发性)@Aaron Hell您编写的那些Callbackwrapper,它们在libModule或myApp中?可能是libModule中的抽象工作还不够深入,它暴露了一个仍然太低级的API:我很难理解为什么前端需要异步编排十几个函数才能让用户登录。我认为对于任何可能在后台长时间运行的异步任务,您有一些函数,似乎允许检查它们中的任何一个当前是否正在运行。。。你将不得不以某种方式对那些长期运行的任务进行簿记;保留一个引用并检查状态等。即使您将这些封装在协同程序中,您仍然需要保留一个对作业的引用才能执行该检查。。。感觉你可能被卡住了你的回电怎么了?Spring为其所有生命周期事件提供回调挂钩。这通常是事件驱动编程的本质。术语挑剔:这不是通常所说的。我也会避免使用术语集群,因为它在行业中有特定的含义(设置相同流程的多个实例以提高并发性)@Aaron Hell您编写的那些Callbackwrapper,它们在libModule或myApp中?可能是libModule中的抽象工作做得不够深入,它暴露了一个仍然太低级的API:我很难理解为什么前端需要异步编排十几个函数才能让用户登录。