【问题标题】:MVVM duplicated code in multiple RepositoriesMVVM 在多个存储库中重复代码
【发布时间】:2020-04-14 01:17:54
【问题描述】:

我有多个存储库,它们需要一些凭据才能使用外部服务。这些凭据存储在我的应用程序的共享首选项中,我成功地将其加载到每个存储库中。

指定这些凭据在 SOAP 标头请求中使用并且由用户提供。

使用当前解决方案,我将这些凭据加载到活动中,然后通过视图模型中的方法传递到存储库。这种方法会生成大量重复的代码,因为对于我需要这些凭据的每个活动,我都会重复整个过程。

有没有更好的解决方案可以遵循 MVVM 最佳实践并避免重复代码?

【问题讨论】:

  • 提取重复的代码并将其作为依赖项提供。您的凭据可以很容易地在另一个被重用的类后面提取,这样这个新类就有一个单一的职责并抽象出凭据的提供方式。我不喜欢具有 static 方法的不必要的 utils 类,因为它使测试变得更加困难。

标签: java android mvvm viewmodel


【解决方案1】:

你能提供更多的上下文吗?

在我看来,如果不了解您的应用程序的更多信息,就没有一般性的答案。这些存储库是否使用相同的服务(例如网络服务?)。如果是这样,您可以将它们添加为自定义拦截器。

您可以将它们注入到存储库后面的抽象层中。

为什么将凭据存储在共享首选项中?它们是静态的(就像您从 api 获得的网络 api 密钥)?如果是这样,你可以把它们放在例如在 gradle.properties 中保存为 BuildConfig 字段

【讨论】:

  • 我试图重写一个问题,也许现在更具体了。
  • 如果你使用 OkHttpClient,我建议使用拦截器 (square.github.io/okhttp/interceptors) 然后由你决定,如果你使用依赖注入,将你的共享偏好注入拦截器。如果没有,请自行传递(一次性)
【解决方案2】:

为避免冗余代码,您可以做的一件事是在实用程序类中编写该代码并在您的存储库中使用它。 希望能帮助到你! :)

【讨论】:

    【解决方案3】:

    您可以编写一个 POJO 类来保存凭据。在您的 Main 活动中创建一个带有凭据的对象,然后根据需要将该对象发送到整个应用程序。

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 2016-10-10
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多