什么叫做一個框架的侵入性?可能很多人很難像別人解釋清楚.
我想了個例子,很好的說明了什么叫侵入性.
初級解釋:
A是侵入性的,B代碼中使用A,那么如果以后不用A了(用另外一個工具代替),必須修改B的代碼。
反之,如果A是非侵入性的,B不用A,用C了,代碼不需要改,改改配置文件什么的,就可以了。
進階解釋:
Spring和hibernate都是通過聲明式配置文件,
就可以實現我們所要的功能,很少用他們的API
進行編碼,估計這是叫低侵入性吧,
EJB則相反。
最終解釋
-------------------------------------------------------------------------------
上面兩個是網上找的,這個是我自己打比方解釋的,你們感受一下
入侵性, 國家A 要為國家B提供某種服務, 比如國防保護吧, 他提供了武器裝備和一些武器使用的軍事人員, 國家A和國家B 界限清白,單純的武器交易關系,這就叫做低侵入性,如果A國家直接在B國家建立軍事基地, 還要B國家出錢啊,整天軍演招搖過市, 影響百姓生活,影響一個國家的正常行為,這就叫做高入侵性.
放到程序里,一個框架的低入侵性, 就是說,想不使用這個框架的時候, 需要改的代碼很少,因為這個框架可以通過配置xml ,properties文件等等 而單獨發揮作用, 如果一個框架的高入侵性, 就是說, 如果突然不想使用這個框架, 那么需要改的代碼特別多,因為 這個框架影響了整個代碼編寫, 到處都要使用它提供的方法, 其他代碼對這個框架的方法 依賴性特別高.
1、侵入式與非侵入式設計:在學框架時,經常會遇到侵入式設計與非侵入式設計?究竟是什么意思?
個人感覺,這兩種設計,主要是基於系統擴展性以及依賴性來說的。比如說:
①當我們用Struts2框架做系統時,Action需要繼承Struts2的一個基類,這樣我的代碼就被侵入了(基類中的部分內容和方法與我的設計內容不相關),如果將Struts2的jar包去掉,系統就掛掉了,這是一種侵入式的表現 。
②再比如 Spring Mvc架構中的Service層,離開Spring依然可以運行,通過配置完成依賴注入后就可以使用,此時,spring就沒有侵入到我業務類的代碼里,這種表現為非侵入式。
當然,在實際設計中,真正能夠做到完全非侵入式設計很難,只能盡量降低侵入程度。
侵入是在兩個系統發生耦合的時候造成的,所謂侵入性就是指的這個框架設計出來的部件對系統的影響范圍,比如開發一個系統要使用第三方框架,如果使用的這個框架需要繼承或者實現框架里面的類和接口,就說這個框架具有侵入性。反之則說那個框架具有“低侵入性”。
使用struts1的時候,需要繼承一些struts1的類,才能使用-----struts1框架具有侵入性。
使用spring,不需要繼承spring特定的類,通過配置完成依賴注入后就可以使用-----低侵入性。
使用mybatis,不需要集成mybatis特定的類,甚至可以和其他ORM組件共存,然后就可以使用-----低侵入性,
ps:任何框架或者第三方類庫,要講到完全沒有侵入是不可能的。
一句話讓你明白代碼的侵入性:
當你的代碼引入了一個組件,導致其它代碼或者設計,要做相應的更改以適應新組件.這樣的情況我們就認為這個新組件具有侵入性
同時,這里又涉及到一個設計方面的概念,就是耦合性的問題.
我們代碼設計的思路是"高內聚,低耦合",為了實現這個思路,就必須降低代碼的侵入性.