MVP:如何从 Presenter 写入日志
MVP: how to write to log from Presenter
我使用 Mosby 构建具有 MVP 模式的应用程序。这是规则之一:
Don't use android library code in Presenter.
但是如果我想从 Presenter 记录一些东西怎么办?我看到的唯一方法是使用 System.out.println();
但听起来不太好。有什么想法吗?
不在 Presenter 中使用 Android 库代码的原因是,当您开始编写单元测试时,不会依赖于 class 中的 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 允许您设置不暂停代码的断点,并在它们被命中时将消息记录到调试控制台。当然,这将取决于您的要求。
我使用 Mosby 构建具有 MVP 模式的应用程序。这是规则之一:
Don't use android library code in Presenter.
但是如果我想从 Presenter 记录一些东西怎么办?我看到的唯一方法是使用 System.out.println();
但听起来不太好。有什么想法吗?
不在 Presenter 中使用 Android 库代码的原因是,当您开始编写单元测试时,不会依赖于 class 中的 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 允许您设置不暂停代码的断点,并在它们被命中时将消息记录到调试控制台。当然,这将取决于您的要求。