用于大型可定制工具应用程序的Android架构



背景:

我开发了一个用于配置物理设备的工具应用程序,目前它支持一个设备。它是在标准Android中使用RxJavaDagger编写的,并且没有实现体系结构模式。

任务:

该应用程序应该能够支持3个额外的设备。用户可以在设备之间进行选择,根据设备的不同,功能会有所不同。这意味着,在某些视图中,需要显示附加选项,而对于某些设备,则需要删除选项。

问题是:

我需要重构这个应用程序,使其能够增强添加的额外设备,并使其可测试,但我还不确定如何为即将到来的更改构建应用程序。作为体系结构的一种手段,我想使用MVVMMVP,但我还没有决定哪种模式更适合我的需求,因为我对两者都不太满意。

这就是我计划如何进行:

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

问题:

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

我正在寻找良好的实践,使应用程序更清洁,更好的可测试性,任何建议都将不胜感激。

我建议您查看Android架构蓝图存储库。它是由谷歌提供的,你有MVP和MVVM架构实现的例子,有/没有Dagger2和RxJava。你也可以去莫斯比图书馆看看。如果你是初学者,IMO最好学习一些经过验证的实现,而不是过度设计你的解决方案。

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

我建议您看看我使用MVPdaggerRxJava改装完成的这个示例项目,它还包含不同类型的模拟测试。

http://github.com/mmirhoseini/fyber_mobile_offers

我希望它能有所帮助:(

最新更新