小编Mar*_*cin的帖子

Dagger 2:如何在运行时更改提供的依赖项

为了学习Dagger 2,我决定重写我的应用程序,但我仍然坚持为以下问题找到合适的解决方案.

出于这个例子的目的,让我们假设我们有一个名为的接口Mode:

public interface Mode {
    Object1 obj1();

    //some other methods providing objects for app
}
Run Code Online (Sandbox Code Playgroud)

和两个实现: NormalModeDemoMode.

模式存储在单例中,因此可以从应用程序中的任何位置访问.

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)

dependency-injection dagger-2

12
推荐指数
2
解决办法
4451
查看次数

清洁架构 - 如何解决数据库事务?

在"干净架构"中,交互者(用例)负责定义业务逻辑.大多数示例以这种方式定义用例:

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.

我到目前为止看到的所有回购都没有考虑到,所以我的问题是:

清洁架构中上述问题的解决方案是什么?

clean-architecture interactors

10
推荐指数
1
解决办法
793
查看次数

Kotlin 多平台:kotlinx.coroutines.test 库在 commonTest 模块中不可见

我很难将协程的 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)

kotlin kotlin-multiplatform kotlin-coroutines

7
推荐指数
1
解决办法
1092
查看次数

Fabric(Crashlytics):最新版本在"最新版本"部分中不可见

在应用程序的新版本(3.5.9)投入生产几天之后,它可以在Crashlytics secion of Fabric中看到:

在此输入图像描述

但不是'最新版本':

在此输入图像描述

有趣的是,在顶部有一个旧版本的应用程序现在没有那么多使用.

这种行为可能是什么原因?

crashlytics twitter-fabric

6
推荐指数
1
解决办法
2432
查看次数