是否应该将演示者 (mvP) 注入 (dagger2) 到 android 中的视图?

should presenters(mvP) be injected(dagger2) to views in android?

在开发和 android 应用程序的上下文中,我应该直接在使用 'new' 的视图中使用演示器,还是将它们注入视图会更好。

Pros/cons 不使用注入的演示者:

  1. 更快的开发时间,无需编写组件和模块。
  2. 演示者与视图紧密耦合,我认为这不是什么大问题,因为大多数时候演示者不会跨多个视图共享(即演示者的一个视图)。
  3. 可能是测试的问题,因为可以提供演示者的依赖注入模拟实现(不确定这是否有用,需要对此有更多了解)。

你是对的。使用注入只会帮助你在漫长的运行。您可以花 5 分钟设置您的模块/组件,也可以只是编码。

只要你不做适当的测试,就没有太大的区别,如果你的演示者看起来像下面这样

mPresenter = new Presenter();

假设您正确使用构造函数注入,在创建组件后,与

相比,您可以节省一些行
@Inject Presenter mPresenter;

// onCreate or some other place
{
    getComponent().inject(this); /* getComponent() also 4-5 lines */
}

再次。如果您使用适当的构造函数注入,那么您很可能没有很多模块代码。只需创建一些组件即可。

但是您节省了一些时间,一旦您想进行测试,这只是一些简单的重构,可以很快完成。

为什么选择 Dagger?

这是假设您的演示者不依赖于其他对象。但如果真的发生了呢?

SharedPreferences preferences = getPreferences();
MyStorage storage = new MyStorage(preferences);
mPresenter = new Presenter(storage);

使用某些东西来存储数据是一个很好的用例。虽然您只是在 activity 中添加了更多关于对象创建的逻辑,但匕首的实现看起来还是一样的。

甚至更多?

现在假设您想要在活动之间从上方共享此 storage。现在您必须向您的 Application 或在您可以创建单例以在整个应用程序中使用的其他地方添加一些逻辑。

不过,这可能不是您唯一的单身人士,您也会开始弄乱您的 Application。不要让我开始管理这些对象的生命周期,例如用户登录或注销,请确保清除缓存数据!

再次。 Dagger 的实现看起来还是一样的。如果需要更多逻辑,可以将其很好地放置在模块中并使用组件依赖项进行抽象。


一旦你开始思考 我可以创建 类 来处理对象构造和注入 你知道你可以首先使用 dagger ;)

我还写了一篇博客 post 关于 dagger basics 包括构造函数注入的工作原理,许多初学者出于某种原因没有正确使用它。