ary*_*axt 2 java dependency-injection inversion-of-control
我一直在阅读有关 DI 和最佳实践的内容,但仍然没有找到这个问题的答案。我什么时候应该使用接口?
所以我的问题是哪一个是正确的?
编辑:
下面是两个方面,我还是没有看出使用接口的好处。在这两种情况下,我都可以轻松模拟类并更改实现
使用接口
bind(IUserStorage.class).to(UserStorage.class);
// Unit test
bind(IUserStorage.class).to(Mock(UserStorage.class));
Run Code Online (Sandbox Code Playgroud)
不使用接口
bind(UserStorage.class).to(UserStorage.class);
// Unit test
bind(UserStorage.class).to(Mock(UserStorage.class));
Run Code Online (Sandbox Code Playgroud)
我不敢相信使用接口违背了 OOP 原则!
在这种情况下我肯定会使用接口。这意味着您的组件是松散耦合的,并且可以轻松模拟和/或替换替代方案。许多 DI 框架将使用这些接口来提供附加功能(例如,创建映射到真实对象的代理对象,但具有附加功能)。
因此,我会尝试对除最琐碎的注入对象之外的所有对象使用接口。在某些阶段,您会想要利用可替代性、框架代码生成等,而改造接口使用是一种额外的痛苦,在项目开始时很容易避免。
| 归档时间: |
|
| 查看次数: |
7669 次 |
| 最近记录: |