簡體   English   中英

開發人員使用哪種設計模式 Abp 框架 (abp.io)?

[英]Which design pattern Abp Framework (abp.io) are developers using?

在我公司,我們使用全新的 Abp 框架( abp.io )。 由於它是一個新框架,因此缺少很多文檔,因此我們必須搜索源代碼。 看了這么多代碼,我意識到這是他們使用的一種模式,總是出現Providers、ProvidersManagement、DefinitionProvider 等等 我想知道這個模式是否有名字或者它只是在那里使用的東西。 我不相信這是第二種選擇,但我不知道。

功能模塊、設置模塊、權限模塊都是使用這種設計模式實現的模塊。

感謝你們!

作為 ABP 框架中這些模式背后的程序員,我想回答這個問題;

首先,我想解釋一下為什么我們要引入這些“提供者”風格的模式。 主要原因是可擴展性:開發人員可以通過實現提供者接口並將其注冊到框架來擴展系統。 這樣,您無需替換或覆蓋一個完整的服務來添加新的行為。

例如, PermissionChecker服務循環通過提供者(實現 IPermissionValueProvider 接口的提供者)以允許您確定當前用戶是否具有請求的權限。 有一些預定義的權限提供者:用戶提供者,角色提供者......等。用戶提供者檢查當前用戶是否直接授權該權限,而角色提供者檢查當前用戶的任何角色是否具有所需的權限。 您可以簡單地創建一個新的提供程序實現,以不同的方式檢查權限並允許用戶執行相關操作。

ASP.NET 內核中也使用了類似的模式。

例如,ASP.NET 核心請求本地化中間件使用類似的模式來確定 web 請求的當前區域性。 有 QueryStringRequestCultureProvider、CookieRequestCultureProvider... 類試圖確定來自不同來源的文化。 它也是可擴展的,您可以注冊新的提供者或重新訂購當前的提供者。

我們通常在框架中將此類類命名為“提供者”或“貢獻者”。

貢獻者是不同的類,它們是操作的參與者。 例如,對於菜單系統,有一個 IMenuContributor 接口,您可以在構建應用程序的主菜單時實現和參與(添加/刪除/替換菜單項)。

該模式也類似於“ 責任鏈”模式。 例如,IPermissionValueProvider 類似於 CoR 模式,因為每個提供者都會嘗試檢查當前用戶是否具有操作權限。 如果提供者不知道,則執行下一個提供者。

所以,我不知道確切的名稱,並且在實現這些時我沒有 100% 復制模式。 如果這是一個新模式(我不這么認為,但是)我不擅長命名模式,讓我們問問 Martin Fowler:)

順便說一句,我們正在不斷改進 ABP 框架的文檔。 在上一個里程碑中,我們已經完成了大部分基礎文檔(如 UOW、分布式事件總線......等)。 最近,對啟動教程進行了全面修改和擴展。 在接下來的里程碑中,文檔也將是重中之重。

感謝您使用 ABP 框架:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM