依賴注入的3種方式 Service層和Dao層真的有必要每個(gè)類都加上接口嗎?
Service層和Dao層真的有必要每個(gè)類都加上接口嗎?這主要取決于您的項(xiàng)目:例如,如果項(xiàng)目中使用了hibernate,以后可能會切換到mybatis,那么Dao需要使用這個(gè)接口。這不會影響上層代碼的
Service層和Dao層真的有必要每個(gè)類都加上接口嗎?
這主要取決于您的項(xiàng)目:
例如,如果項(xiàng)目中使用了hibernate,以后可能會切換到mybatis,那么Dao需要使用這個(gè)接口。這不會影響上層代碼的更改。
另一個(gè)例子是,項(xiàng)目是一個(gè)單一的應(yīng)用程序。任何代碼修改都需要重新編譯整個(gè)項(xiàng)目,因此不需要接口。如果項(xiàng)目是由模塊編譯和部署的,那么可以使用接口解耦。假設(shè)修改了Dao,只需要重新編譯和部署Dao模塊,而不影響上層模塊。
此外,如果項(xiàng)目團(tuán)隊(duì)中有許多新手,簡單的代碼結(jié)構(gòu)可能更合適。復(fù)雜項(xiàng)目結(jié)構(gòu)的學(xué)習(xí)成本較高。
如果工程進(jìn)度非常緊迫,我們可以用簡單粗暴的方式用經(jīng)濟(jì)成本來說明原因。
使用接口的成本是不使用接口的成本(包括后續(xù)維護(hù)成本)。
如果項(xiàng)目變化很大,部署了模塊,項(xiàng)目不急,使用接口的成本比不使用接口的成本低,雖然早期不使用接口似乎更簡單;相反,不使用接口的成本低,而且連框架都不能用~
畢竟工具是提高效率的,那你為什么不能和自己相處呢
自動(dòng)注入到底比new好在哪?
控制反轉(zhuǎn)和容器IOC只能看作是一種編程思想。在理想狀態(tài)下,可以實(shí)現(xiàn)自動(dòng)注射和生命周期管理。但是,在實(shí)際的發(fā)展中,我個(gè)人覺得有時(shí)不如新的方便。我主要遇到以下問題:
1。編寫大量的配置和構(gòu)造函數(shù)比編寫新的更麻煩,特別是對于某些函數(shù),項(xiàng)目只使用一次。原來,new會立即完成,但是如果你想使用依賴注入,你仍然需要編寫配置
2。當(dāng)需要注入更多的類時(shí),構(gòu)造函數(shù)就像老婦人的裹尸布一樣臭,一樣長。關(guān)鍵是以前用過的一些類現(xiàn)在不用了,你要手動(dòng)清理構(gòu)造函數(shù),這比new要麻煩多了
3。這也是最關(guān)鍵的一點(diǎn),有時(shí)項(xiàng)目的復(fù)雜性很復(fù)雜,會遇到循環(huán)注入的問題。也就是說,A依賴B,B依賴C,C依賴A,這種情況說明架構(gòu)的存在是不合理的。在這一點(diǎn)上,您可以重構(gòu)系統(tǒng),也可以不直接使用依賴注入來解決它。]總之,依賴注入只是一種編程思想,具有一些高級特性。它不是萬能的。它存在的意義是脫鉤。從宏觀上講,就是要解決多人共同開發(fā)一個(gè)項(xiàng)目時(shí),各自獨(dú)立的模塊,減少相互之間的依賴和干擾。從微觀的角度看,有幾個(gè)類是密切相關(guān)的。雖然文件是獨(dú)立的,但是功能是集成的。在這個(gè)時(shí)候,脫鉤是沒有意義的。為什么不是新的?
因此,我個(gè)人理解依賴注入與引擎是一樣的。發(fā)動(dòng)機(jī)由幾個(gè)主要部件組成。這些組件之間是解耦的,可以通過依賴注入來實(shí)現(xiàn)。對于單個(gè)組件的內(nèi)部部件和螺釘,必須使用依賴注入來實(shí)現(xiàn)它們。這比收益多一點(diǎn)。使用new來實(shí)現(xiàn)它們要方便得多。。。[挑鼻子][挑鼻子][挑鼻子][挑鼻子][挑鼻子]