繁体   English   中英

如何在 MVVM 中为 Repository 提供 Drawable,干净的架构

[英]How to Providing Drawable for Repository in MVVM, Clean Architecture

我正在尝试使用 SOLID 和 MVVM 架构进行编码。 但我很困惑如何在 MVVM 中向 Repository 提供 drawable

interface IStringProvider {
   val mengenaliPotensiDiri: String
   val eventSpesial: String
   val pentingMengenaliDiri: String
   val mengenaliAspekDiri: String
   val mulaiRencanaKarier: String
}

class AssessmentListRepository(private val stringProvider: IStringProvider) {
   fun getAssessmentTopicMengenaliDiri(): List<AssessmentProgressItem> {
      return listOf(
         AssessmentProgressItem(
            stringProvider.kerangkaPerencanaanKuliahDanKarier,
            R.drawable.ic_home_video_open, //How should i provide it?
            R.drawable.ic_home_video_lock,
            R.drawable.ic_home_video_open,
            { AssessmentProgressItem.PROGRESS_STATUS_OPEN },
            true,
            0,
            {}
         ),
         AssessmentProgressItem(
            stringProvider.caraMengenaliDiri,
            R.drawable.ic_home_video_open,
            R.drawable.ic_home_video_lock,
            R.drawable.ic_home_video_open,
            { AssessmentProgressItem.PROGRESS_STATUS_OPEN },
            true,
            0,
            {}
         )
      )
   }
}
  1. 那么,我应该如何向我的 AssessmentListRepository 提供 drawable 呢? 我应该提供 Drawable class,还是只提供 integer ID?

  2. Drawable 是 Android 组件吗?

有趣的问题。 希望我理解正确,因为我不明白为什么您的存储库需要可绘制对象? 这些drawables要做什么? 将它们返回给 VM?

实际上,我不确定存储库是否必须提供 Drawable。 And R.java is definitely Android specific class, so we can say that your Repository class depends on Android specific class. 我认为更好的方法是这样做:

  1. 创建独立的 class 将描述您的屏幕所需的数据。 您可以使用枚举/密封类来描述一些数据/状态,而不是可绘制对象。
  2. 存储库将返回 class (没有可绘制或类似资源)
  3. ViewModel 将从存储库中询问数据并分析该数据。
  4. ViewModel 将根据存储库中的数据更改与 UI 相关的属性。
  5. 由于 View 是 ViewModel 的 UI 相关属性的观察者,因此 View 会自动更改 UI 状态。 在这个阶段应该使用 Drawable 和其他资源。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM