MVP:如何从Presenter写入日志

时间:2016-04-23 14:29:42

标签: android mvp mosby

我使用Mosby构建具有MVP模式的应用程序。这是规则之一:

  

不要在Presenter中使用Android库代码。

但是如果我想从Presenter中记录一下该怎么办?我看到的唯一方法是使用System.out.println();,但听起来不太好。有什么想法吗?

1 个答案:

答案 0 :(得分:8)

在Presenter中不使用Android库代码的原因是,当您编写单元测试时,您的类中的Android代码没有依赖关系,因此它可以直接在JVM上运行。

如果您发现自己需要使用Android代码,那么我这样做的方法是将其隐藏在界面后面。这样,您可以在生产代码中使用一个实现,在测试中使用另一个实现。

因此,创建一个名为Logger的接口:

public interface Logger {

    void logd(String tag, String message);
}

然后,对于您的生产代码,您可以使用:

public class LoggerImpl implements Logger {

    public void logd(String tag, String message) {

        Log.d(tag, message);
    }
}

但是当你运行测试时,你可以使用另一个实现:

public class LoggerTestImpl implements Logger {

    public void logd(String tag, String message) {

        System.out.println(tag + " " + message);
    }
}

将Logger依赖项添加到Presenter的构造函数中。在运行时给它一个LoggerImpl,在测试期间给它一个LoggerTestImpl。

另外,您可以考虑首先是否需要从Presenter进行大量日志记录。 Android Studio允许您拥有不挂起代码的断点,并在命中时将消息记录到调试控制台。这当然取决于您的要求。