什麼是 Dependency Injection?

Dependency Injection 或稱 DI 或稱依賴注入,其實是一種 design pattern (設計模式)。舉例來說,我們可能會寫出下列形式的類別:

class S3(object):
    def __init__(self):
        self.aws_s3_client = aws.connect()

這種寫法會將 aws_s3_client 相關的邏輯與 aws.connect() 緊密相依,不僅可能造成每次建立一個 S3 storage 就會建立一個全新的 aws 連線之外,也讓程式較難以進行測試,所以我們可以將 aws_s3_client 以傳入的方式注入給 S3 類別使用:

class S3(object):
    def __init__(self, aws_s3_client):
        self.aws_s3_client = aws_s3_client

如此一來,測試 aws_s3_client 可以在外層建立並重複利用之外,測試也變得相當好寫,只要建立一個假的 aws_s3_client 注入依賴就可以不用連到 AWS 也能進行測試。

這種做法就是典型的 Dependency Injection 。

理解 Dependency Injection 之後,可以進一步了解何謂 Inversion of Control 或簡稱 IoC, 在此就不劇透何謂 IoC 啦,有興趣可以透過下列 8 分鐘的影片了解來龍去脈:

https://www.youtube.com/watch?v=tYZd8hserms

p.s. 如果你有在寫 Angular 或者 NestJS 勢必要理解 DI 與 IoC 的概念才能較快上手

追蹤新知

看完這篇文章了嗎?還意猶未盡的話,追蹤粉絲專頁吧!

我們每天至少分享 1 篇文章/新聞或者實用的軟體/工具,讓你輕鬆增廣見聞提升專業能力!如果你喜歡我們的文章,或是想了解更多特定主題的教學,歡迎到我們的粉絲專頁按讚、留言讓我們知道。你的鼓勵,是我們的原力!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!