t*****d 发帖数: 525 | |
p*****2 发帖数: 21240 | |
x***4 发帖数: 1815 | 3 讲讲怎么烂?只用过spring DI。guice听过没用过。
【在 p*****2 的大作中提到】 : 我们再用,是很烂
|
d****i 发帖数: 4809 | 4 谷歌自己搞的东西你指望不是烂货?go, guice, dart, 一个比一个烂。。。
【在 t*****d 的大作中提到】 : 如题
|
s***o 发帖数: 2191 | 5 现在google不是在推dagger 2吗,guice被抛弃了吧 |
c*********e 发帖数: 16335 | 6 en,google是计算机博士开的公司,思路比较偏理论一点,实践方面的自己的想法不是
很多,比如最近和ms合作搞的angularjs 2.
【在 d****i 的大作中提到】 : 谷歌自己搞的东西你指望不是烂货?go, guice, dart, 一个比一个烂。。。
|
t*****d 发帖数: 525 | 7 所有的行为变成 runtime based, 你完全不能从 code 容易知道。加上 annotation,
完全是一团乱麻。
【在 x***4 的大作中提到】 : 讲讲怎么烂?只用过spring DI。guice听过没用过。
|
p*****2 发帖数: 21240 | 8
我感觉DI破坏了封装性,把很多细节expose出来了
【在 x***4 的大作中提到】 : 讲讲怎么烂?只用过spring DI。guice听过没用过。
|
j*******l 发帖数: 1066 | 9 spring不是一码事吗 你要是code generation based的di 那叫dagger
,
【在 t*****d 的大作中提到】 : 所有的行为变成 runtime based, 你完全不能从 code 容易知道。加上 annotation, : 完全是一团乱麻。
|
j*******l 发帖数: 1066 | 10 这个是缺点 但让test变容易
更何况di的constructor不用是public的 一定程度上保护了封装
【在 p*****2 的大作中提到】 : : 我感觉DI破坏了封装性,把很多细节expose出来了
|
|
|
j*******l 发帖数: 1066 | 11 烂不烂你要看和谁比 guice出来的时候所有人还在写spring xml呢
【在 d****i 的大作中提到】 : 谷歌自己搞的东西你指望不是烂货?go, guice, dart, 一个比一个烂。。。
|
p*****2 发帖数: 21240 | 12
我觉得测试有mockito就够了。
我感觉为了自己测试容易,使得caller的负担加大,有点本末倒置。
【在 j*******l 的大作中提到】 : 这个是缺点 但让test变容易 : 更何况di的constructor不用是public的 一定程度上保护了封装
|
t*****d 发帖数: 525 | 13 你也可以手动向constructor supply 参数。测试也会很容易。
【在 j*******l 的大作中提到】 : 这个是缺点 但让test变容易 : 更何况di的constructor不用是public的 一定程度上保护了封装
|
q*c 发帖数: 9453 | 14 guice 这烂货被 abuse 以后程序实在没法看。
【在 t*****d 的大作中提到】 : 你也可以手动向constructor supply 参数。测试也会很容易。
|
j*******l 发帖数: 1066 | 15 public class Sample{
public void doSomething(){
db.connect();
}
private final DB db = new DB();
}
就说这个class应该怎么unit test 或者不用constructor injection 这个class如何写
才能方便测试
【在 p*****2 的大作中提到】 : : 我觉得测试有mockito就够了。 : 我感觉为了自己测试容易,使得caller的负担加大,有点本末倒置。
|
p*****2 发帖数: 21240 | 16
好问题,我宁愿remove final
【在 j*******l 的大作中提到】 : public class Sample{ : public void doSomething(){ : db.connect(); : } : private final DB db = new DB(); : } : 就说这个class应该怎么unit test 或者不用constructor injection 这个class如何写 : 才能方便测试
|
t*****d 发帖数: 525 | 17 public class Sample {
public Sample(DB db) {
this. db = db:
}
public void doSomething(){
db.connect();
}
private final DB db;
}
或者
public class Sample {
void setDB(DB db) {
this. db = db:
}
public void doSomething(){
db.connect();
}
private DB db;
}
【在 j*******l 的大作中提到】 : public class Sample{ : public void doSomething(){ : db.connect(); : } : private final DB db = new DB(); : } : 就说这个class应该怎么unit test 或者不用constructor injection 这个class如何写 : 才能方便测试
|
d******e 发帖数: 2265 | 18 比spring 强。
最糟糕的是java 8 + 一堆 interface + 一个impl + spring
【在 t*****d 的大作中提到】 : 如题
|
d******e 发帖数: 2265 | 19 java设计的问题。这个只有换门比如scala, swift等等才能解决。
,
【在 t*****d 的大作中提到】 : 所有的行为变成 runtime based, 你完全不能从 code 容易知道。加上 annotation, : 完全是一团乱麻。
|
j*******l 发帖数: 1066 | 20 这和Java有什么关系 dagger这些code generation based不也是Java吗
【在 d******e 的大作中提到】 : java设计的问题。这个只有换门比如scala, swift等等才能解决。 : : ,
|
|
|
j*******l 发帖数: 1066 | 21 所以为了test也要用dependency injection
Guice/spring这不过把dependency injection变容易 少了繁琐的factory代码而已
【在 t*****d 的大作中提到】 : public class Sample { : public Sample(DB db) { : this. db = db: : } : public void doSomething(){ : db.connect(); : } : private final DB db; : } : 或者
|
j*******l 发帖数: 1066 | 22 你举个例子 怎么remove final 然后用mockito测试? setter injection?
【在 p*****2 的大作中提到】 : : 好问题,我宁愿remove final
|
d******e 发帖数: 2265 | 23 所谓testable,DI, 的实质就是消除内部状态,everything is injectable.就是一条
条线传下来。
其实这就是FP。
OOP语言的缺陷导致必须用DI来 patch.
【在 j*******l 的大作中提到】 : 这和Java有什么关系 dagger这些code generation based不也是Java吗
|
p*****2 发帖数: 21240 | 24
setter injection也好不了。我说的是field injection
【在 j*******l 的大作中提到】 : 你举个例子 怎么remove final 然后用mockito测试? setter injection?
|
p*****2 发帖数: 21240 | 25
我觉得内部状态还好,更重要的是要消除副作用。Java这个语言确实设计有很多问题,
后边用pattern来补,最后搞的乱糟糟的。
【在 d******e 的大作中提到】 : 所谓testable,DI, 的实质就是消除内部状态,everything is injectable.就是一条 : 条线传下来。 : 其实这就是FP。 : OOP语言的缺陷导致必须用DI来 patch.
|