Android多功能堆砌在单一页面的解耦设计

111 阅读2分钟

背景:

之前接手了一个较为复杂的项目,因为预见了之后迭代的劣化可能,所以做了一下骨架重构设计,接下来介绍一下遇到的问题和具体方案,希望能给大家带来一些帮助。

Android开发中,界面和逻辑经常难舍难分。当遇到功能复杂的页面时,诸多业务叠加骤增了代码量,且不可避免的相互耦合,堆砌在Activity中,仅是常规的使用MVVM进行职能拆分并不足以解决这类问题。另大量的使用dialog与fragment,互相通信时频频使用EventBus导致消息满天飞,同时数据源的修改时机过多,不利于定位源头,最终导致难以复现排查问题。

场景:

  • 单一页面中拥有众多功能,且迭代频繁(新增功能、功能进行实验验证,配置上下线)

  • 单一功能逻辑通常也较为复杂

  • 由于数据和功能的联动较多,排查解决问题的难度也较高

目标:

  • 解耦独立各个功能,提供横向扩展能力,以应对频繁迭代

  • 内部实现消息分发,提高内聚,降低排查问题的难度

  • 不停止业务迭代的前提下,逐步迁移

方案:

将Activity的业务功能职责移交给Container。Container 内部由各个Boards以Tree的结构组合。Board又分为Board和GroupBoard,这个结构可以类比Android的View体系。

由此功能便划分成了一个个Board,各自负责自己的数据、页面、逻辑。再由Container来管理Board的装载、卸载和内部的消息分发。(有需要的话也可以感知生命周期变化)

联想截图_20241211150014.png

食用:

dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            mavenCentral()
            maven { url 'https://jitpack.io' }
        }
    }
    dependencies {
            implementation 'com.github.Disguiser99:board:1.0.5'
    }

github : github.com/Disguiser99…

其中写了一个demo,用于示范如何使用,以及Board间如何通信等。