淺談PHP如何實現依賴注入(二)
- 作者:新網
- 來源:新網
- 瀏覽:100
- 2018-05-10 18:02:33
現在我們就當已經實現了redisDB和cache這兩個組件,具體的細節(jié)這里就先不做討論了,來看看如何使用使用吧。首先需要將兩個組件注入到容器中:
現在我們就當已經實現了redisDB和cache這兩個組件,具體的細節(jié)這里就先不做討論了,來看看如何使用使用吧。首先需要將兩個組件注入到容器中:
![002UASMrzy7605pjKJv15&690.jpg](http://imgu.xinnet.com/d/file/20180510/85b9d9838be8cc241b03fc2f5bb34f12.jpg)
<
div>
到這里你可能會覺得這樣以來反而有點繁瑣了。cache和redisDB的結構如此之像,完全可以把redis寫到cache中而沒必要單獨分離出來?但是你想過沒有,有些數據及時性沒那么高而且數量比較大,用redis有點不合適,mongodb是更好的選擇;有些數據更新頻率更慢,對查詢速度也沒要求,直接寫入文件保存到硬盤可能更為合適;再或者,你的客戶覺得redis運維難度有點大,讓你給他換成memcache... 這就是為什么把它分離出來了。然后,繼續(xù)改進代碼:
我們新增加了一個接口BackendInterface,規(guī)定了redisDB,mongoDB,file這三個類必須實現這個接口所要求的功能,至于其他錦上添花的功能,隨你怎么發(fā)揮。而cache的代碼,好像沒有變,因為cache不需要關心數據是怎么存入
數據庫或者文件中。而cache的調用者,也不需要關心cache具體是怎么實現的,只要根據接口實現相應的方法就行了。多人協(xié)作你會更加受益,你們只需要商定好接口,然后分別實現就行了。
以上代碼還可以繼續(xù)改進,直到你認為無可挑剔為止。比如,redis服務在一個請求中可能會調用多次,而每次調用都會重新創(chuàng)建,這將有損性能。只需擴展一下DI容器就好增加一個參數或增加一個方法,隨你。
這樣以來,如果某個服務在一次請求中要調用多次,你就可以將shared屬性設置為true,以減少不必要的浪費。如果你覺得每次在注入時都要setDi有點繁瑣,想讓他自動setDi,那可以這么做:
然后,就可以這樣:
我們現在所實現的這個DI容器還很簡陋,還不支持復雜的注入,你可以繼續(xù)完善它。不過,通過這些代碼你已經了解什么是依賴在注入了,你可以將這種思想應用到你的項目中,或者著手開發(fā)你自己的框架。
以上就是小編關于依賴注入知識的分享,后續(xù)我們會為大家更多知識干貨!