歡迎光臨
每天分享高質量文章

DI是實現面向切麵和麵向抽象的前提

DI越來越重要

DI就是依賴註入,現在來說,大部分框架都是以DI為基礎組件的,每一個框架都有自己的DI組件,像dotnet core,java spring等,也都為自己的框架量身打造了DI工具。

面向物件的幾個原則

  • 依賴倒置原則(DIP):一種軟體架構設計的原則(抽象概念)。
  • 控制反轉(IoC):一種反轉流、依賴和接口的方式(DIP的具體實現方式)。
  • 依賴註入(DI):IoC的一種實現方式,用來反轉依賴(IoC的具體實現方式)。
  • IoC容器:依賴註入的框架,用來映射依賴,管理物件創建和生存周期(DI框架)。

DI的作用

在很多教程里,DI與IOC基本是相同的概念,其實DI是IOC的具體實現,而我們說的autofac,spring ioc,unity castle都是DI框架,也叫做ioc容器!它們的作用就是統一管理物件,這個管理也包括了物件的產生和銷毀,產生就是new出一個物件,銷毀就是物件的生命周期,一般來說根據生命周期的範圍,可以分為瞬間(用完就銷毀),單次http請求(請求結束後銷毀)和單例(應用程式重啟時銷毀),我們根據物件的功能去定義它們,例如一個日誌組件,它可以被定義為單例的;而一個倉儲物件,它需要定義成’瞬間銷毀’的。

DI在公用組件里的表現

公用組件,它可能是一個公用的架構,為了完成某個功能而被設計出來的穩定的框架,它內部的工作流程相對固定,而實現的具體細節可以由開發人員根據專案自定義,要想實現這種設計 ,我們就想到了面向抽象的設計,即面向接口的編程,組件里的物件都是抽象定義的,並且不負責生產物件,因為只要生命就是具體的,所以這裡的物件都是需要通過DI產生的!

我們用到的太多框架都是這種設計,大家有時間 可以 看看它們的原始碼:

  • .net identity4
  • .net abp
  • java springboot
  • java spring security

設計一個授權框架

Lind.Authorization是一個授權架構體系,主不但有授權的核心邏輯,而且也是面向接口的體現,授權的核心邏輯是固定的,TokenAuthenticationFilter是一種業務場景的功能組件,它的主邏輯不能修改,但裡面的每塊內容可以根據專案自身去實現,這型別於模板方法樣式,它規定的業務流程,開發人員根據具體業務去實現裡面的細節。

Lind.Authorization組成

  • IUserDetails授權物體接口,可能是用戶表,賬戶表等
  • IUserDetailsService授權物體業務接口,規定了授權時需要的方法,具體專案需要去實現它
  • IUserDetailsAuthenticationProvider授權提供者接口,實現了基本的授權業務代碼,具體專案可以改寫它的方法
  • TokenAuthenticationFilter基於token的授權過濾器,主要實現了對請求方法的攔截,它是授權的入口
  • TokenUserDetailsAuthenticationProvider為token過濾器實現的授權管理者,提供一些公開的方法,使用者可以繼承它,根據自己需要重寫裡面的方法

TokenAuthenticationFilter認證的過程

下麵看一下授權組件的依賴關係:

TokenAuthentictokenationFilter
>
IUserDetailsAuthenticationProvider
>
IUserDetailsService
>
IUserDetails

開發人員如果希望在自己專案中使用它,最少要實現這種個接口

IUserDetailsService:用戶獲取,token生成,token獲取
IUserDetails:用戶物體

已同步到看一看
赞(0)

分享創造快樂