V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
BeautifulSoap

终于明白为什么初学 依赖注入 时,总是搞不清依赖的意思

  •  
  •   BeautifulSoap · Jan 12, 2021 · 3810 views
    This topic created in 1934 days ago, the information mentioned may be changed or developed.

    以前第一次接触依赖注入时,看着各种介绍文章介绍 “依赖” 这个词的意思,总是处于那种虽然看得懂讲了什么,但是总感觉有点懵的状态,虽说之后也是理解了,但对这种曾经和别人的隔阂感总是有种奇怪的感觉

    最近在整理知识写文章的时候才猛然发现到底是什么原因,原来这是个语文或者中文表达的问题

    因为在中文里(这里指普通人或者第一次接触依赖注入这类概念的人), 依赖 这个词是个动词,即 A 依赖 B,或者作为名词的时候用法也是非常固定的 A 对 B 有依赖 这种句式

    但是依赖注入中,依赖 这个词的意思是反过来代指对 A 有依赖的那些项目。用这种意思来做表述的话就是: A 的依赖是 B 。这种用法是普通的中文表述中是非常奇怪的也几乎见不到的,这也就导致初期的理解会变得有一定困难。更加正确的说法我觉得应该是 依赖项A 的依赖项是 B

    然后我想了下,会出现这种问题的原因可能还是出在翻译上,英文叫 Dependency Injection,就这么直接粗暴翻译下就是依赖注入。可是 DI 这个词中的 Dependency 对应到中文里比较合适应该是 依赖项 这个词,也就是说是 依赖项注入。这方面可以参考下日语中对 DI 的翻译: 依存性の注入 ,有把这部分意思翻译出来。

    这次的发现虽然是非常小的事情,但让我再次加深了下面两条的理解:

    1. 翻译真的很难,一个好的翻译有时候真的能降低理解概念的门槛

    2. 一个人一旦学会了某个知识,就无法想象这个知识在不会的人心里是怎样的。比如这次,懂了依赖注入概念的人可能很多人都没有意识到,在不懂这个概念的人眼里,“依赖”这个词是有一定理解障碍的。这也提醒我,在写文章或者教别人的时候,需要更多站在不懂这个知识的人的角度来思考怎么传达自己的知识

    22 replies    2021-01-14 13:55:10 +08:00
    johnsona
        1
    johnsona  
       Jan 12, 2021 via iPhone
    注入依赖
    killerv
        2
    killerv  
       Jan 12, 2021
    是的,翻译是很重要的,参考“鲁棒性”
    wangxiaoaer
        3
    wangxiaoaer  
       Jan 12, 2021 via iPhone
    你想多了,在 DI 这个语境下,依赖是个名词。
    feather12315
        4
    feather12315  
       Jan 12, 2021 via Android
    …从来没感觉依赖这个词难理解过,倒是初学编程时候,对递归不理解。
    表达的是:每个人对词汇的理解难易是不同的,这东西没法强行统一。
    我倒觉得依赖项更难理解。
    fiveelementgid
        5
    fiveelementgid  
       Jan 12, 2021 via Android
    DI 啊,我一开始也看了半个月才看懂,加油咯
    BeautifulSoap
        6
    BeautifulSoap  
    OP
       Jan 12, 2021
    @wangxiaoaer
    我顶楼里可没说过 DI 里的“依赖”不是名词,只是 DI 里依赖的用法在普通中文里不怎么见到
    EPr2hh6LADQWqRVH
        7
    EPr2hh6LADQWqRVH  
       Jan 12, 2021
    所以说大学生过四级很重要啊,四级不过怎么搞懂外面进来的这些东西呢
    BeautifulSoap
        8
    BeautifulSoap  
    OP
       Jan 12, 2021
    @feather12315 我觉得还是能评判的,把这词汇和解释做一定的给不懂或没接触过的人看,问他们是否能大致理解或理解起来有没有负担就行了

    我上面有提到过,一个人一旦学会了某个知识,就无法想象这个知识在不会的人心里是怎样的。这也是很多人不擅长教人知识的原因。“这知识你怎么就是不懂!这么笨!” “这定律怎么就不理解!” ,在我教过一些人之后这就是我最大的感悟,教人这事真的是需要训练和多站在不懂的人的角度来考虑的。可能这也是为什么好多大学教材写得让人感觉不是人话的原因吧
    BeautifulSoap
        9
    BeautifulSoap  
    OP
       Jan 12, 2021
    @fiveelementgid @avastms
    是的,我之前学 IoC 、DI 、DIP 的时候真的就是后来直接跑去看英文的 wiki 和相关引用的文章,才算有了一定的理解
    fiveelementgid
        10
    fiveelementgid  
       Jan 12, 2021 via Android
    给你一个 asp.net core 的文档里的:DI 实际用于在一个管理系统中标注一个 interface 和与他对应的 class,当你在 constructor 使用这个接口的时候他会给你创建一个对应的 object (也称为 constructor injection)
    fiveelementgid
        11
    fiveelementgid  
       Jan 12, 2021 via Android
    @BeautifulSoap emmmmmm 我英语也不好,建议你丢掉中文文献,多看看就会了
    lidlesseye11
        12
    lidlesseye11  
       Jan 12, 2021
    手动点赞
    要翻译首先得中文水平牛逼,其次得能理解原作者想表达的思想,第三得用心推敲。
    国内目前还没见到过的不错的译者。
    yungo8
        13
    yungo8  
       Jan 12, 2021
    nice,java 里通常就是说属性值的注入...
    lxilu
        14
    lxilu  
       Jan 12, 2021 via iPhone
    注入依赖 +1
    liyaoo
        15
    liyaoo  
       Jan 13, 2021 via Android
    是的,开始我也理解为动词,就很懵逼
    ninja543
        16
    ninja543  
       Jan 13, 2021
    日语理解哈哈哈,其实看英文文献带两本字典就够了,英英和英日,便于理解
    SmiteChow
        17
    SmiteChow  
       Jan 13, 2021
    翻译是否准确还需要对照原文看,如果不看原文是不能下结论的。

    依赖注入通常来讲需要编程序言支持反射机制( reflection ),通常由框架( framework )在运行时动态获取用户代码元信息( code meta )。

    但随着语言特性的发展,解包( destruction )成为了新的更加简洁的实现方式。
    SWALLOWW
        18
    SWALLOWW  
       Jan 13, 2021
    就是中文,道地性你们能理解吗
    no1xsyzy
        19
    no1xsyzy  
       Jan 14, 2021
    @lidlesseye11 不局限于纯粹技术内容的话,随想散文和小说都有翻译做得不错的……
    应用文翻译更难(需要对这方面技术有了解?)?
    还是说应用文跨语言比较容易,翻译的收益不是很大?

    @BeautifulSoap 你主题里的解释太复杂了
    简单地说,就是你理解为
    〔动〕〔宾〕
    依赖  注入
    而其实这个词是
    〔偏〕〔正〕
    依赖  注入

    另外,“注入依赖” 是动宾结构的动词性短语,但结合了中文动词当名词的用法,确实本土化。
    尤其是当放在介词后面的时候,动宾结构会自动地被当作介宾结构的宾语(“通过注入依赖”)。
    BeautifulSoap
        20
    BeautifulSoap  
    OP
       Jan 14, 2021
    @no1xsyzy 并不是的,我虽然没法从语法角度来阐述,但是我的想法是:

    1. 依赖作为动词理解的话 依赖(动)注入,会让人理解成:xxx 依赖注入这项技术,自然这是不正确的,而且也会让人费解

    2. 依赖在动词之外还有种名词化的用法,但是这个时候的用法是非常固定的,类似 我对你的依赖;你是我的依赖。如果将其“依赖注入”中的依赖理解成名词这种意思,那么理解出来的意思就是: 在 A 中注入对 xxx 的依赖。虽然这句式看起来和依赖注入的意思——在 A 中注入它所依赖的 xxx 非常像,但是意思却是完全不对的

    我在学习依赖注入的时候,主要是陷入了第二种的理解偏差中
    BeautifulSoap
        21
    BeautifulSoap  
    OP
       Jan 14, 2021 via Android
    @no1xsyzy 至于你说的以及上面人说的 依赖注入 还是 注入依赖,我觉得可能并不是阻碍理解的关键

    依赖注入这个词,语法上正确的理解方式实际上应该是动宾倒置。在中文里,动宾倒置算是知道非常广的用法,最出名的一个例子应该是初中或高中都有教过的 “古人诚不我欺” 这句
    但是为什么到了依赖注入中,就偏偏让人产生理解偏差了?我觉得问题在于“依赖”这个词的词性让人没法一下联想到动宾倒置这种用法,就算联想到了,对“依赖”这个词的理解也可能会有偏差

    所以我举了一个例子 依赖项注入,这里依赖项是指代明确的一个名词,可以方便人反应过来其意思。所以 DI 这个词的翻译,可能无论是依赖项注入 /注入依赖项,还是依赖注入 /注入依赖,重点应该在对 Dependency 的释意上而不是语法顺序上
    no1xsyzy
        22
    no1xsyzy  
       Jan 14, 2021
    @BeautifulSoap #20 哦我没想到第二种偏差
    那样的话,实际上英文 DI 也是有这个问题的。
    到底是原本其实没有任何依赖关系,通过注入形成了新的 Dependency (或者说 Optional Dependency,或者能够使得一切皆 Optional Dependency )
    还是这里有个 Dependency 需要调用者提供,不提供不能工作。
    (可以参考下 Python 的几个 mock 模块,能够覆盖几乎任何属性值任何 obj.meth 或者 obj.mem 的工作方式改为返回一个 dummy 对象。在 Python 里一切皆可以是 Optional Dependency )

    正确的名称应当是 Deferred Dependency ?

    #21 现代汉语动宾倒置几乎不存在……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2670 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 12:00 · PVG 20:00 · LAX 05:00 · JFK 08:00
    ♥ Do have faith in what you're doing.