ioc,把控制反轉到業務端,這句話沒什麼問題,在springboot框架裡,物件的管理是通過spring ioc來實現的,而開發人員的開發原則裡總是說「面向介面程式設計」,而為什麼要面向介面卻沒幾個人能說出來,今天在寫乙個基於redis的手動分布鎖時,對這個面向介面和控制反轉又有了乙個體會。
當你為開發人員提供乙個封閉的包時,他們是直接用的,他們不會修改你的**,當然他們可以去繼承並擴充套件;當然如果你不希望被繼承可以宣告為final
,這都是物件導向程式設計裡提供好的功能,我們主要看控制反轉
這句話,它把控制權交給了上層去實現,底層通過 面向介面
的原則只設計乙個規範,而又使用者去實現;但框架功能裡的細節是要有的,這類似於「模版方法」模式,底層框架實現了流程,而個性化的部分由上層去實現。
public inte***ce auditoraware
上面這個泛型介面只有乙個方法,需要讓上層開發人員根據自己的業務去實現它,比較返回乙個當前登陸的使用者實體,或者返回使用者名稱,然後底層框架裡直接使用這個auditoraware介面的物件;當然如果你的底層只接收乙個string型別的值,你也可以去派生乙個個性化介面,讓上層開發人員去實現你的介面即可。
/**
* 返回使用者id的標識介面,由程式使用者去實現.
*/public inte***ce useridauditoraware extends auditoraware
上面**更加準確的規定了auditoraware是乙個字串的介面,只返回使用者id即可。
@component
public class currentuseraware implements useridauditoraware
}
我們的底層**會使用它的getcurrentauditor()
返回值 ,它是乙個字串。
public object execute(string sourceid, integer timeout, timeunit unit)
對於乙個小小的功能,我們在經過思考之後,對於之前學過的東西進行總結,你可能會想法某種設計模式、某個演算法、某個原則、在使用它們之後,讓你的**擴充套件性更好,這種**也彷彿有了生命! 面向介面程式設計
面向介面程式設計 英文的定義是 program to an inte ce,not an implementation 它是物件導向程式設計裡面的乙個設計原則。所謂原則,就是 你最好按我的樣子來做,實在不行也可以違反 物件導向程式設計有三個主要的特性,即是封裝,多型,繼承。面向介面程式設計是多型特性...
面向介面程式設計
物件導向設計裡有一點大家已基本形成共識,就是面向介面程式設計,我想大多數人對這個是沒有什麼覺得需要懷疑的。問題是在實際的專案開發中我們是怎麼體現的呢?難道就是每乙個實現都提供乙個介面就了事了?反過來說,你有時候有沒有覺得介面是多餘的事?又或者,你僅僅是覺得現在類似spring這樣的框架已習慣用介面這...
面向介面程式設計
上篇我們了解了當依賴注入與面向介面程式設計結合起來,才能真正發揮依賴注入的優勢。這篇我們開始簡單了解一下面向介面程式設計。什麼是面向介面程式設計?乙個類依賴其他類的目的是為了獲取其他類所提供的服務,可能這種服務有多種實現,我們可能需要根據不同的場景使用不同的實現。此時,我們可以使用多型,將同一功能的...