什麼是 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 的概念才能較快上手

FOLLOW US

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

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

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