我正在重构我们的android代码,无法处理以下问题。我们的一些片段包含了太多的代码(大约1000行代码(。
- 我们可以从后端动态更新布尔标志
- 我们的片段应该根据后端的布尔标志来处理额外的UI
我使用ViewModel+LiveData风格来处理我们的UI逻辑。基本上,我们的一些片段从我们的VM中观察到5-7个不同的LiveData可观察性。每个LiveData观察者都会生成20-100行代码。它们处理颜色变化、不同对话框、小吃店或床单等的外观。
现在我想减少碎片中的代码,但我不确定该如何解决这个问题。
我马上想到的一个解决方案是使用继承。例如,我们的片段将扩展片段特征2->片段特征3->片段特征4->片段特征5。他们所有人都会在onViewCreated中观察到特定的LiveData。
尽管如此,我认为继承似乎是一个棘手的解决方案,并将在未来引发更多问题。理想情况下,我希望有以下场景:
我们的片段将为每个功能创建一个不同的类,该类将充当特定LiveData的管理器。问题是您无法在类中观察LiveData,没有视图生命周期所有者也许我遗漏了什么,有人可以纠正我:(
根据您必须在片段中编写大量代码的原因,可能会有不同的方法。如果你对观察到的数据应用一些逻辑,比如If语句等,你应该将你的数据提供给片段是可呈现的形式。在这种情况下,你可以使用实时数据操作符,通过使用映射、中介实时数据等,以反应的方式操纵数据,这样你就可以直接将值设置为视图。另一种情况是,如果您已经有一个简单的数据在视图中,但设置它们需要很多代码行。为此,您可以创建customViews或customComponents来处理数据,以便将字段设置行转移到更合适的位置。如果这两种解决方案都无法解决您的问题,您可以在视图模型和视图之间创建演示者。