为了学习Dagger 2,我决定重写我的应用程序,但我仍然坚持为以下问题找到合适的解决方案.
出于这个例子的目的,让我们假设我们有一个名为的接口Mode:
public interface Mode {
Object1 obj1();
//some other methods providing objects for app
}
Run Code Online (Sandbox Code Playgroud)
和两个实现:
NormalMode和DemoMode.
模式存储在单例中,因此可以从应用程序中的任何位置访问.
public enum ModeManager {
INSTANCE,;
private Mode mode;
public Mode mode() {
if (mode == null)
mode = new NormalMode();
return mode;
}
public void mode(Mode mode) { //to switch modules at runtime
this.mode = mode;
}
}
Run Code Online (Sandbox Code Playgroud)
在NormalMode切换到DemoMode在运行时(比方说,当背景几次用户clickcs)
public void backgroundClicked5Times(){
ModeManager.INSTANCE.mode(new DemoMode());
//from now on every object that uses …Run Code Online (Sandbox Code Playgroud) 在"干净架构"中,交互者(用例)负责定义业务逻辑.大多数示例以这种方式定义用例:
public MyUseCase() {
public boolean execute(...) {
int id = repository.insert(a)
if(id > 0) {
b.aId= id;
repository.insert(b);
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
Interactors主要使用简单的CRUD操作或存储库查询.上面的示例在简单的情况下是同步的,但您可以使用异步解决方案(如回调或rxjava)以相同的方法找到repos.
但是用例不完整呢?例如,您不能100%确定插入后a它仍然会在插入时存在b.如果在插入后,a你得到一些RepositoryException同时插入b.
我到目前为止看到的所有回购都没有考虑到,所以我的问题是:
清洁架构中上述问题的解决方案是什么?
我很难将协程的 kotlin 测试框架kotlinx.coroutines.test与面向 Android(以及未来的 ios)的多平台项目集成在一起
我的通用代码严重依赖协程,但我无法测试它们(看起来测试库不在类路径中)
build.gradle 对于通用模块:
plugins {
id 'org.jetbrains.kotlin.multiplatform'
id 'com.android.library'
id 'kotlin-kapt'
}
android {
defaultConfig {
compileSdkVersion 28
javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true
}
lintOptions {
checkAllWarnings true
}
}
def coroutinesVersion = "1.3.0-M2"
def mockKVersion = "1.9.3"
kotlin {
targets {
fromPreset(presets.android, 'android')
}
sourceSets {
commonMain.dependencies {
//Kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" //used in Log implementation
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutinesVersion"
}
commonTest.dependencies {
//Kotlin
implementation "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
//Coroutines testing
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion"
implementation …Run Code Online (Sandbox Code Playgroud) 在应用程序的新版本(3.5.9)投入生产几天之后,它可以在Crashlytics secion of Fabric中看到:
但不是'最新版本':
有趣的是,在顶部有一个旧版本的应用程序现在没有那么多使用.
这种行为可能是什么原因?