以下是对于我这个项目的各种场景的描述,基本覆盖了定制化框架的所有涉及的场景:
假设有ABCDE五个产品。
1)基于配置实现:
场景1: 新功能,BCDE有,A没有
解决方案1:把入口UI屏蔽掉,使用配置文件if else来控制
场景2: 对某个页面, CDE有相同的UI,AB有些不同,A多一个控件,B少一个控件
在Core中放相同的Layout,处理所有最全的逻辑
在ABC中,做一个同名的Layout,修改为自己的UI,分为加、减、改三种:
场景2_1: A减去控件:因为在Core中Activity会用到减去的R.id,运行时会报找不到这个控件id的错误,所以,需要开关来控制,不走这段逻辑。
场景2_2: B加上控件button
一种办法是,在产品B中,继承之前的Activity,使用Hook,替换之;
另一种办法是(C中实现),copy一份相同package的Activity到Core中,覆盖之前的Activity,这时,这个Activity不需要配置。要注意不要提交copy到core的的代码
场景2_3(不做新demo了): C修改UI:指的是属性的修改,没有额外的工作。
修改UI:在具体产品中加新的layout
修改Activity逻辑:继承+Hook
结论:尽量做减法
2)基于AOP实现(稍后推出)