1. 程式人生 > >ABP原始碼分析十七:DTO 自動校驗的實現

ABP原始碼分析十七:DTO 自動校驗的實現

對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。

Ivalidate: 空介面,用於標識該介面的物件在使用前需要被validate先。

IInputDto:用於輸入引數的DTO,該介面繼承自Ivalidate。所以所有作為輸入引數的DTO都會在使用前先validate。

ICustomValidate: 用於自定義Validation 規則. ABP預設的validation 規則是來自System.ComponentModel.DataAnnotations中的規則。如果要新增自定義Validation 規則,需要實現ICustomValidate介面。

IShouldNormalize:該介面定義了Normalize方法,實現該方法可以在Validation 後,使用前,對DTO做最後的處理。

MethodInvocationValidator: ABP通過這個物件中的validate方法對被呼叫方法中的引數(繼承自Ivalidate的引數)做validate. 通過下面的程式碼可以看出只要物件實現了Ivalidate介面,都會被強制執行validation.

ValidationInterceptor:上面MethodInvocationValidator的validate方法是由ValidationInterceptor觸發的。這是一個自定義的Castle攔截器。

ValidationInterceptorRegistrar:上面ValidationInterceptor攔截器則是由ValidationInterceptorRegistrar注入到ABP底層容器中的。ABP只針對實現了Iapplicationservice介面的物件注入ValidationInterceptor攔截器。而ValidationInterceptorRegistrarinitialize方法則是通過AbpKernelModule來觸發的(以前的博文已有分析)。

最後圖描述了上面四個類的關係。

相關推薦

ABP原始碼分析DTO 自動實現

對傳給Application service物件中的方法的DTO引數,ABP都會在方法真正執行前自動完成validation(根據標註到DTO物件中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。 Ivalidate: 空介面,用

[Abp 原始碼分析]四、DTO 自動驗證

0.簡介 在平時開發 API 介面的時候需要對前端傳入的引數進行校驗之後才能進入業務邏輯進行處理,否則一旦前端傳入一些非法/無效資料到 API 當中,輕則導致程式報錯,重則導致整個業務流程出現問題。 用過傳統 ASP.NET MVC 資料註解的同學應該知道,我們可以通過在 Model 上面指定各種資料特性,然

ABP原始碼分析DTO的設計

IDTO:空介面,用於標註Dto物件。 ComboboxItemDto:用於combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用於name value鍵值對的DTO, name為string型別, value為泛型或string型別。

[Abp 原始碼分析]、ASP.NET Core 整合

0. 簡介 整個 Abp 框架最為核心的除了 Abp 庫之外,其次就是 Abp.AspNetCore 庫了。雖然 Abp 本身是可以用於控制檯程式的,不過那樣的話 Abp 就基本沒什麼用,還是需要集合 ASP.NET Core 才能發揮它真正的作用。 在 Abp.AspNetCore 庫裡面,Abp 通過 W

ABP原始碼分析Entity的設計

IEntity<TPrimaryKey>: 封裝了PrimaryKey:Id,這是一個泛型型別 IEntity: 封裝了PrimaryKey:Id,這是一個int型別 Entity<TPrimaryKey> :支援主鍵是泛型型別的Entity Entity:支援主鍵是int型別的

ABP原始碼分析本地化

本文逐個分析ABP中涉及到locaization的介面和類,以及相互之間的關係。本地化主要涉及兩個方面:一個是語言(Language)的管理,這部分相對簡單。另一個是語言對應得本地化資源(Localization)的管理,這部分稍顯複雜。 LanguageInfo:用於封裝language的基本

ABP原始碼分析Auditing

審計跟蹤(也叫審計日誌)是與安全相關的按照時間順序的記錄,它們提供了活動序列的文件證據,這些活動序列可以在任何時間影響一個特定的操作。 AuditInfo:定義如下圖中需要被Audit的資訊。 AuditedAttribute: 用於標識一個方法或一個類的所有方法都需要啟用Auditing功能

ABP原始碼分析Timing

Timing這個簡單實用的功能主要用於以統一的方式表示時間。因為ABP中有大量的module,還支援自定義module,所以將時間統一表示為local時間(預設)或utc時間是必要的。 IClockProvider:提供獲取當前時間和標準化時間的介面。 UtcClockProvider:實現了以UTC

ABP原始碼分析UI Inputs

以下圖中描述的介面和類都在Abp專案的Runtime/Validation, UI/Inputs目錄下的。在當前版本的ABP(0.83)中這些介面和類並沒有實際使用到。閱讀程式碼時可以忽略,無需浪費時間去尋找其是如何被ABP使用的(本文的目的)。 這些介面和類最終都是通過IInputType被Feature

[Abp 原始碼分析]五、自動審計記錄

0.簡介 Abp 框架為我們自帶了審計日誌功能,審計日誌可以方便地檢視每次請求介面所耗的時間,能夠幫助我們快速定位到某些效能有問題的介面。除此之外,審計日誌資訊還包含有每次呼叫介面時客戶端請求的引數資訊,客戶端的 IP 與客戶端使用的瀏覽器。有了這些資料之後,我們就可以很方便地復現介面產生 BUG 時的一些環

ABP原始碼分析Unit Of Work

ABP以AOP的方式實現UnitOfWork功能。通過UnitOfWorkRegistrar將UnitOfWorkInterceptor在某個類被註冊到IOCContainner的時候,一併新增到該類在容器中對應的ComponentModel的Interceptors集合中。總結一句話就是,UOW的功能是通過

原始碼分析]、ASP.NET Core 整合

  目錄      0. 簡介      1. 啟動流程      2. 程式碼分析      2.1 初始化操作      2.2 AbpAspNetCoreModule 模組      2.3 控制器與動態 API      2.4 過濾器      2.3 CSRF 防禦元件      2.4

[Abp 原始碼分析]六、後臺作業與後臺工作者

0. 簡介 在某些時候我們可能會需要執行後臺任務,或者是執行一些週期性的任務。比如說可能每隔 1 個小時要清除某個臨時資料夾內的資料,可能使用者會要針對某一個使用者群來群發一組簡訊。前面這些就是典型的應用場景,在 Abp 框架裡面為我們準備了後臺作業和後臺工作者來幫助我們解決這個問題。 後臺作業與後臺工作者的

[Abp 原始碼分析]一、許可權驗證

0.簡介 Abp 本身集成了一套許可權驗證體系,通過 ASP.NET Core 的過濾器與 Castle 的攔截器進行攔截請求,並進行許可權驗證。在 Abp 框架內部,許可權分為兩塊,一個是功能(Feature),一個是許可權項(Permission),在更多的時候兩者僅僅是概念不同而已,大體處理流程還是一樣

[Abp 原始碼分析]、異常處理

0.簡介 Abp 框架本身針對內部丟擲異常進行了統一攔截,並且針對不同的異常也會採取不同的處理策略。在 Abp 當中主要提供了以下幾種異常型別: 異常型別 描述 AbpException Abp 框架定義的基本異常型別,Abp 所有內部定義的異常型別都繼承自本類。 AbpInitializa

Spring Security原始碼分析Spring Security OAuth2整合JWT

Json web token (JWT), 是為了在網路應用環境間傳遞宣告而執行的一種基於JSON的開放標準(RFC 7519).該token被設計為緊湊且安全的,特別適用於分散式站點的單點登入(SSO)場景。JWT的宣告一般被用來在身份提供者和服務提供者

Spring Security原始碼分析Spring Security專案實戰

Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Contr

Spring Security原始碼分析Spring Security 頁面許可權控制

Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Contr

netty原始碼分析()Netty執行緒模型深度解讀與架構設計原則

上次分析到: public abstract class SingleThreadEventLoop extends SingleThreadEventExecutor implements EventLoop public ChannelFutu

ABP原始碼分析四十三ZERO的本地化

ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag