问一个比较傻逼的问题。。。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jy04149886
V2EX    Java

问一个比较傻逼的问题。。。

  •  
  •   jy04149886 2015-02-11 14:44:07 +08:00 5074 次点击
    这是一个创建于 3961 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请问,在三层架构当中,上一层调用下一层的服务,使用注入模式比使用对象的方法调用,优势在哪呢??
    26 条回复    2015-04-03 14:44:17 +08:00
    raincious
        1
    raincious  
       2015-02-11 14:50:36 +08:00
    非Java小能手,可能立即的不对,但是你是不是在说这个?: http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code
    raincious
        2
    raincious  
       2015-02-11 14:51:16 +08:00
    - 立即
    + 理解
    jy04149886
        3
    jy04149886  
    OP
       2015-02-11 15:12:20 +08:00
    @raincious 太好了,谢谢
    tabris17
        4
    tabris17  
       2015-02-11 15:17:29 +08:00
    你在说IoC容器么?

    IoC容器获取对象,获取对象后才能“对象的方法调用”啊,两码事儿
    jy04149886
        5
    jy04149886  
    OP
       2015-02-11 15:21:33 +08:00
    @tabris17 直接new,不注入
    tabris17
        6
    tabris17  
       2015-02-11 15:31:02 +08:00
    @jy04149886 用IoC就是咱们不用知道对象到底怎么生成的,有些对象是new的,但是有些对象要用build或者factory模式生成。有些对象需要依赖别的服务或组件。而使用IoC容器可以让调用者无需关心这些细节。

    比如一个dbconnection对象,你直接new需要传递ip端口用户名密码,你要知道从哪里去读取这些信息,到底是配置文件还是全局变量或者是常量。而是用IoC就只要把这些信息写入配置文件就可以了
    jy04149886
        7
    jy04149886  
    OP
       2015-02-11 15:34:01 +08:00
    @tabris17 这个我知道,比如数据库连接对象通过注入取得是很方便的,但是一个action调用它的service对象通过依赖注入来实现,我感觉好烦琐,但是现在的java三层架构的开发都是这种模式的吧。。。。是不是对这个模式使用的有点不合适。。。
    tabris17
        8
    tabris17  
       2015-02-11 15:38:26 +08:00
    @jy04149886 你就姑且认为是一种DI的美学吧……
    tabris17
        9
    tabris17  
       2015-02-11 15:40:04 +08:00
    或者说“用new太low了”
    jy04149886
        10
    jy04149886  
    OP
       2015-02-11 15:44:46 +08:00
    @tabris17 好吧。。。
    hcymk2
        11
    hcymk2  
       2015-02-11 16:00:24 +08:00
    windyboy
        12
    windyboy  
       2015-02-11 16:01:31 +08:00
    注入的优势在于,你只告诉接口你想干什么,至于最后这个事情怎么干,谁来干,可以执行的时候才决定
    fangzhzh
        13
    fangzhzh  
       2015-02-11 16:04:38 +08:00 via Android
    注入方便测试
    jy04149886
        14
    jy04149886  
    OP
       2015-02-11 16:07:26 +08:00
    @windyboy 这机制确实很强大,不过超级大项目才体现优势吧。。。做个管理软件什么的,我看貌似没什么必要。。。
    jy04149886
        15
    jy04149886  
    OP
       2015-02-11 16:08:13 +08:00
    @fangzhzh 貌似现在都用注解来实现了,貌似没有xml那么强大?
    invite
        16
    invite  
       2015-02-11 16:13:03 +08:00
    何必纠结什么模式呢?怎么方便怎么来啊。
    raincious
        17
    raincious  
       2015-02-11 16:13:18 +08:00
    @jy04149886

    看你的项目到底要规范化到什么程度。

    一般来说通用的代码除非出于冗余性以及组建依赖的考虑,一般还是抽出来做成可复用的流程。使用IoC方法可以轻易地做到这一点,而且可以更加灵活的进行加载(比如你可以决定是否缓存某个对象的实例,来实现比如复用数据库连接的实例),代码量可以更少。

    反过来说如果你的代码里都是直接new出来,首先是维护不方便,如果这些被new的组件有更新导致调用方式改变(比如拆分了之类),那么可能需要改的地方就太多了,不便维护。而且代码一长,维护就相对更困难。

    代码总归还是给人看的。
    caixiexin
        18
    caixiexin  
       2015-02-11 16:13:36 +08:00 via Android
    解耦,模块化,当然可以不用,自己决定:)
    设计模式的问题也争论挺久了
    6IbA2bj5ip3tK49j
        19
    6IbA2bj5ip3tK49j  
       2015-02-11 17:11:09 +08:00
    团队作战,写好接口,各写各的。
    kedron
        20
    kedron  
       2015-02-11 17:51:51 +08:00
    @invite 怎么方便怎么来?垃圾代码就是这么出来的。
    kedron
        21
    kedron  
       2015-02-11 17:57:30 +08:00   1
    注入的出发点就是为了解耦。至于为什么要解耦,怎么实现解耦的,解耦是什么意思。楼主可以顺着这个思路继续学习。

    多说点,至于你现在做的东西要不要采用注入,还需要你自己学习之后结合实际情况,具体分析。很多架构、模式、框架不是说什么地方都要用。但是不用,是因为自己知道这个东西,分析之后决定不用。而不是因为自己啥也不懂,眼前怎么省事怎么来。
    kedron
        22
    kedron  
       2015-02-11 18:01:40 +08:00
    楼主这个问题一点都不傻逼,反而是有些回答……
    invite
        23
    invite  
       2015-02-12 12:46:34 +08:00
    @kedron 看来我们对"方便"一词的理解不一致啊,老去扯那些一套套的理论,反而自己绕进去了。
    rikeinei
        24
    rikeinei  
       2015-02-18 16:55:03 +08:00
    使用注入模式比使用对象的方法调用,有没有优势主要看面对的情况,直接New不见得坏,但是注入也不见得好。

    目前项目因为太庞大,平行开发修改频繁,用的注入,大家为了不影响别人开发都是先写接口...
    funky
        25
    funky  
       2015-02-23 14:13:38 +08:00
    老问题了。凡事在没有全面了解之前慎用。
    sunnysign
        26
    sunnysign  
       2015-04-03 14:44:17 +08:00
    我觉得python不错,用过之后就觉得java确实太麻烦,杂乱,不美好,不可爱,没有掌控感。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5197 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 76ms UTC 07:46 PVG 15:46 LAX 23:46 JFK 02:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86