Android架构适用于大型可定制工具应用

时间:2016-09-19 15:13:14

标签: android mvvm architecture mvp android-databinding

背景:

我参与了一个用于配置物理设备的工具应用程序,目前它支持一个设备。它使用AndroidRxJava以标准Dagger编写,并未实现架构模式。

任务:

该应用应该能够支持3个额外的设备。用户可以在设备之间进行选择,具体取决于设备,功能会有所不同。这意味着,在某些视图中需要显示其他选项,而对于某些设备,需要删除选项。

问题:

我需要重构这个应用程序,以使其可以增加其他设备,并使其可测试,但我还不确定如何为即将发生的更改构建应用程序。 作为一种架构手段,我想使用MVVMMVP,但我还没有确定哪种模式更适合我的需求,因为我并不喜欢这两种模式。

这就是我打算继续进行的方式:

  • 创建一个单一调用DeviceConfiguration,它将跟踪当前所选设备并知道哪个设备具有哪些功能。
  • 创建一个名为Device的接口,所有设备类将实现该接口,定义所有设备共有的基本最小方法。
  • 当用户切换到另一个Activity时,DeviceConfiguration会检查当前选择的设备,并为View / Presenter / ViewModel设置正确的设备。
  • 在活动开始时,onCreate中的设置方法将根据DeviceConfiguration提供的数据显示/隐藏设备可用的选项。
  • 点击屏幕内的某个位置会调用Device.doSomething(),它将使用开头设置的设备并使用设备特定的呼叫(尽管如果设备没有&#39,我还不确定如何处理它; t具有此功能,仍然实现调用并将方法保持为空?)

问题:

这就是我的想法,但这是一个很好的结构来处理不同设备的类似功能吗? 是否可以使用这种设置测试应用程序,还是为相应的设备创建自己的活动/布局更好?我特别不确定这是否适用于MVVM,如果不仅数据,而且布局内的一般内容和视图需要动态更改。

我正在寻找良好的做法,以使应用程序更清洁,更易于测试,任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:2)

我建议您查看Android Architecture Blueprints存储库。它由Google提供,您可以使用/不使用Dagger2和RxJava的MVP和MVVM架构实现示例。您还可以查看Mosby库。如果您是初学者,那么IMO可以更好地学习一些经过验证的实施,而不是过度使用您的解决方案。

答案 1 :(得分:0)

重新开始学习并使用最佳实践重构旧项目甚至开始新项目是一个重大决定。

我建议你看看我使用 MVP Dagger RxJava 完成的示例项目改造并且还包含不同类型的模拟测试。

  

http://github.com/mmirhoseini/fyber_mobile_offers

我希望它有所帮助:)