android ioc框架,是否有必要在Android项目中使用IOC框架

是否有必要在Android项目中使用IOC框架?

本来只是想找个注解库用一下

结果顺便看了看相关的库

首先是

在任何项目中使用butterknife都是正确且没有问题的. 非常轻量级的库.

可以缩减一部分代码.

其次是

Dagger其实和butterknife一样也是 JakeWharton 写的, 算是一家的产品吧.

View binding注解部分和butterknife几乎一致.可以认为没有区别.

Dagger额外提供了 IOC框架 功能

最后是

RoboGuice在View Binding上和以上2个库没有区别

也额外提供了 IOC框架功能

它和 Dagger 的区别是

RoboGuice 是 运行时 通过反射实现的IOC

Dagger 是通过 APT(Annotation Process Tool) 在运行时 生成辅助类 实现的 IOC

又翻了一下Spring中使用IOC的例子...

IOC的核心是解耦...

解耦的目的是 .... 修改耦合对象时不影响另外一个对象...降低模块之间的关联

在Spring中IOC更多的是依靠 xml的配置...

而以上Android上的IOC框架均不使用xml配置系统....而且也没有必要....

毕竟不是web要去考虑server/system/db/web容器的差异...

常见的例子..

public class MainActivity extends Activity {

@Inject Boss boss;

...

}

就看 扔物线 写的这个例子好了..

对于这个设计而言...谁被解耦了?

我认为MainActivity和Boss被解耦了.....更确切的讲....MainActivity和Boss的构造方法解耦了...

如果你下面需要使用Boss对象,仍然需要调用Boss中的方法...那么Boss和MainActivity依然存在依赖关系..

好处是,我修改Boss的构造方法不会影响MainActivity了...我可以修改Provider去自己获取参数..

Android中 Activity 一般不会参与复用..你不会去再写一个Activity继承MainActivity,也不会去生成多个MainActivity....即使同时存在多个MainActivity实例也是归系统管理..和你没有关系.... 所有通常我认为只有Boss是会复用的会变化的会被继承的...MainActivity的变化只和它自身有关系,不会影响系统中其它部分..

仔细思考,即使是在IOC框架中,耦合性也并没有消失,只是将耦合的部分从 Class之间转移到了 Class和IOC容器之间

回到上面这个部分...

你觉得 Activity 在 Android app中 处于 一个什么角色??

Activity不能充当容器角色么?

UI / 业务逻辑 / DB / Conection / Cache

所有组件都只和Activity产生依赖关系,互相之间互不影响....

在Activity外再嵌套一层IOC容器来解耦偶到底有无必要?

Activity为什么还需要解耦?

画一下2个模型图

bVkMx0

我觉得本质上没有区别?

我构造一个场景

Activity需要做请求网络的操作,操作完成后写DB和Cache,IOC给你注入一个 HttpMananger / DBManager / CacheManager 又如何,你不要调用它们的方法吗? 耦合性并没有降低啊?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值