DI是實現面(mian)向切面(mian)和面(mian)向抽象(xiang)的前提
DI越來越重要
DI就是依賴注入,現在(zai)來說,大部分框架(jia)都(dou)是以DI為基(ji)礎組(zu)件的,每一個框架(jia)都(dou)有自己的DI組(zu)件,像dotnet core,java spring等,也都(dou)為自己的框架(jia)量身(shen)打造(zao)了DI工具。
面向對象的幾個原則
- 依賴倒置原則(DIP):一種軟件架構設計的原則(抽象概念)。
- 控制反轉(IoC):一種反轉流、依賴和接口的方式(DIP的具體實現方式)。
- 依賴注入(DI):IoC的一種實現方式,用來反轉依賴(IoC的具體實現方式)。
- IoC容器:依賴注入的框架,用來映射依賴,管理對象創建和生存周期(DI框架)。
DI的作用
在很多教程里,DI與IOC基本是相同的概念,其實DI是IOC的具體實現,而我們說的autofac,spring ioc,unity castle都是DI框架,也叫做ioc容器!它們的作用就是統一管理對象,這個管理也包括了對象的產生和銷毀,產生就是new出一個對象,銷毀就是對象的生命周期,一般來說根據生命周期的范圍,可以分為瞬間(用完就銷毀),單次http請求(請求結束后銷毀)和單例(應用程序重啟時銷毀),我們根據對象的功能去定義它們,例如一個日志組件,它可以被定義為單例的;而一個倉儲對象,它(ta)需要定義(yi)成'瞬間銷毀'的。
DI在公用組件里的表現
公(gong)用組件(jian),它可能是(shi)(shi)一個公(gong)用的(de)(de)(de)架(jia)構,為了(le)完成某個功能而(er)被設計出來的(de)(de)(de)穩定(ding)的(de)(de)(de)框(kuang)架(jia),它內部的(de)(de)(de)工作流程(cheng)相(xiang)對(dui)(dui)固定(ding),而(er)實(shi)現的(de)(de)(de)具體細節可以由開發(fa)人員(yuan)根據項目(mu)自(zi)定(ding)義(yi),要(yao)想實(shi)現這種設計 ,我們就(jiu)想到了(le)面向抽(chou)象(xiang)的(de)(de)(de)設計,即面向接口的(de)(de)(de)編程(cheng),組件(jian)里(li)的(de)(de)(de)對(dui)(dui)象(xiang)都(dou)(dou)是(shi)(shi)抽(chou)象(xiang)定(ding)義(yi)的(de)(de)(de),并且(qie)不負責生產(chan)對(dui)(dui)象(xiang),因(yin)為只要(yao)生命就(jiu)是(shi)(shi)具體的(de)(de)(de),所以這里(li)的(de)(de)(de)對(dui)(dui)象(xiang)都(dou)(dou)是(shi)(shi)需要(yao)通過(guo)DI產(chan)生的(de)(de)(de)!
我們用(yong)到(dao)的太多框架都是這種(zhong)設計(ji),大家(jia)有(you)時間 可以 看看它們的源代(dai)碼(ma):
- .net identity4
- .net abp
- java springboot
- java spring security
設計一個授權框架
Lind.Authorization概述
Lind.Authorization是一個授權架構體系,主不但有授權的核心邏輯,而且也是面向接口的體現,授權的核心邏輯是固定的,TokenAuthenticationFilter是一種業務(wu)場景的(de)功能(neng)組(zu)件(jian),它的(de)主(zhu)邏輯不能(neng)修改,但里(li)面的(de)每塊內容可以(yi)根據(ju)項(xiang)目自(zi)身(shen)去實(shi)現(xian),這類型于模板方(fang)法模式,它規定的(de)業務(wu)流(liu)程,開發人員根據(ju)具體業務(wu)去實(shi)現(xian)里(li)面的(de)細節。
Lind.Authorization組成
- IUserDetails授權實體接口,可能是用戶表,賬戶表等
- IUserDetailsService授權實體業務接口,規定了授權時需要的方法,具體項目需要去實現它
- IUserDetailsAuthenticationProvider授權提供者接口,實現了基本的授權業務代碼,具體項目可以覆蓋它的方法
- TokenAuthenticationFilter基于token的授權過濾器,主要實現了對請求方法的攔截,它是授權的入口
- TokenUserDetailsAuthenticationProvider為token過濾器實現的授權管理者,提供一些公開的方法,使用者可以繼承它,根據自己需要重寫里面的方法
TokenAuthenticationFilter認證的過程
下面(mian)看一下授權組件的依賴關系:
TokenAuthentictokenationFilter
>
IUserDetailsAuthenticationProvider
>
IUserDetailsService
>
IUserDetails
開發人(ren)員如果希望(wang)在自己項(xiang)目中使用(yong)它,最(zui)少要實現(xian)這(zhe)種(zhong)個接口
IUserDetailsService:用戶獲取,token生成,token獲取
IUserDetails:用戶實體