ABP框架的理解和總結
1、使用automapper實現實體與DTO之間的對映。
2、ABP使用Castle Windsor為整個程式框架提供依賴注入的功能。 使用log4Net日誌記錄元件, 提供給其他各層呼叫以進行日誌記錄。
4、ABP的多租戶模式是關閉的,我們可以在模組PreInitialize 方法中開啟他。Configuration.Multitency.IsEnabled = true;
5、如果你使用了module zero,那麼你不需要關心tenant store
6、OWIN是Open Web Server Interface for .NET的首字母縮寫。是web server的規範,你可以依據OWIN規範開發自己的web server,讓web應用跑在自己的web server下。
你能使用任何你想的來替換IIS(比如:Katana或者Nowin),並且在必要時隨時升級,而不是更新作業系統。當然,如果你需要的話,你可以構建自定義的宿主和Pipeline去處理Http請求。
這一切的改變都是由於OWIN的出現,他提供了明晰的規範以便我們快速靈活的去擴充套件Pipeline來處理Http請求,甚至可以不寫任何一句程式碼來切換不同的Web Server,前提是這些Web Server遵循OWIN規範。
7、在VS2017中整合WBP原始碼可以除錯分析。
8、依賴注入:建構函式注入、屬性注入、依賴注入框架
9、ASP.NET Core已經內建了依賴注入:Microsoft.Extensions.DependencyInjection。在ASP.NET Core中ABP使用Castle.Windsor.MsDependencyInjection實現了依賴注入。所以你不需要考慮它。
10、☆☆會話管理:ABP提供了 IAbpSession 介面獲取當前使用者以及租戶資訊,而不是使用ASP.NET的Session。
11、☆☆快取管理:使用 MemoryCache 來實現了該抽象基類。它能夠被任何其它的快取類來擴充套件。Abp.RedisCache 包就擴充套件了該快取基類。快取的過期時間預設是60分鐘。可做Redis Cache 整合。
12、日誌管理:ABP使用Castle Windsor's logging facility日誌記錄工具,並且可以使用不同的日誌類庫,比如:Log4Net, NLog, Serilog... 等等。更厲害的是,
你還可以在客戶端呼叫日誌記錄器。在客戶端,ABP有對應的 javascript 日誌API,這意味著你可以記錄下來瀏覽器的日誌,實現程式碼如下:abp.log.warn('a sample log message...');
13、設定管理:ABP框架提供強大的基礎架構,我們可以在服務端或者客戶端設定,來儲存/獲取應用程式、 租戶和使用者級別的配置。設定的範圍:Application、Tenant、User
14、物件之間的對映:automapper整合。
15、郵件傳送:MailKit整合。
16、實體(entity)有自己的唯一標識,而值物件(vo)是沒有標識的。
17、領域服務可以被應用服務和其它的領域服務呼叫,但是不可以被表現層直接呼叫(表現層可以直接呼叫應用服務)。可以結合自己畫的技術路線圖進行理解。
18、工作單元:ABP預設使用 工作單元 來管理資料庫連線和事務。
19、領域事件:事件匯流排-定義事件-觸發事件-事件處理-註冊處理器-取消註冊事件
20、資料過濾器:達到檢索不到邏輯刪除資料的效果,需要在SQL的Where條件IsDeleted = false。這是個乏味的工作,可藉助過濾器工作。
20、☆☆規約模式:通過連結業務規則與使用boolean邏輯來重組業務規則。主要是用來對實體和其它業務物件構造可重用的過濾器。
21、驗證DTO:驗證包含客戶端、服務端兩次。客戶端側重於表單驗證,服務端驗證更重要。
22、ABP鑑權:應用層,使用Abp.Authorization.AbpAuthorize類。Web層,使用 Abp.Web.Mvc.Authorization.AbpMvcAuthorize類。在ASP.NET Web API中,使用 Abp.WebApi.Authorization.AbpApiAuthorize特性。
23、ABP功能管理:Saas應用都有不同功能的版本。可以給租戶提供不同的價格和功能選項。
24、審計日誌:I使用IAuditingStore介面來儲存審計資訊。module-zero專案是這個介面的完整實現,如果你不想自己實現這個介面,SimpleLogAuditingStore類可以直接拿來使用,它是實現方式是將審計資訊寫入日誌中。
25、實體歷史:ABP 提供了一個基礎設施,可以自動的記錄所有實體以及屬性的變更歷史。預設開啟,一般應用不重要可以在預初始化PreInitialize 方法中禁用他Configuration.EntityHistory.IsEnabled = false;
26、動態webapi層:Abp框架能夠通過應用層自動生成web api 。Http謂詞:get、put、delete、post
27、整合OData:開放資料協議(Open Data Protocol,縮寫OData)是一種描述如何建立和訪問Restful服務。你可以在Abp中使用OData,只需要通過Nuget來安裝Abp.Web.Api.OData.
28、整合SwaggerUI:開啟Swagger,你可以獲得一個互動式的文件,生成和發現客戶端SDK。
29、ABP表現層 - 本地化:模組預初始化時:Configuration.Localization.Languages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", true));
30、ABP表現層 - 導航欄:在Abp中,需要建立一個派生自NavigationProvider的類來定義一個選單項。
31、異常處理:ABP會自動的記錄這些異常並且以適當的格式做出響應返回到客戶端。<customErrors mode="On" />
32、ABP表現層 - Javascript API:ABP提供了一系列的物件和函式,使用這些物件和函式使得指令碼開發更容易且標準化。
33、ABP表現層 - 嵌入資原始檔:將檔案單獨修改為資原始檔。使用嵌入式檔案:<script type="text/javascript" src="~/AbpZero/Metronic/assets/global/scripts/metronic.js"></script>
34、ASP.NET Core:將老專案遷移到ASP.NET Core。參考本節。
35、CSRF或(cross-site request forgery)XSRF保護【跨站請求偽造】。ABP框架儘可能的簡化且自動化CSRF保護。啟動模板 實現了開箱即用的預配置。
36、嵌入式資源:ABP提供了一個簡單的方法來使用嵌入式的 Razor檢視(.cshtml檔案)和 其它資源(css,js,img等檔案)。比如選中 index.cshtml 檔案,然後開啟屬性視窗(快捷鍵:F4),更改 生成操作 的值為 嵌入式資源。
37、一、ABP後臺服務 - 後臺作業:ABP提供了後臺作業和後臺工人,來執行應用程式中的後臺執行緒的某些任務。預設作業超時設定是2天。
禁用後臺作業:這種需求及其少見。但是想象一下,同時開啟同一個應用程式的多個例項且使用的是同一個資料庫。在這種情況下,每個應用程式的作業將查詢相同的資料庫並執行它們。
這會導致相同的任務的多次執行,並還會導致其它的一些問題。為了阻止這個,你有兩個選擇:①、你可以僅為你應用程式的一個例項開啟後臺作業。②、你可以禁用Web應用的所有例項的後臺作業,並且建立一個獨立的應用程式(如:Windows服務)來執行你的後臺作業。
二、ABP後臺服務 - 後臺工人(特點是週期性執行某件事情):比如①、週期性地執行舊日誌的刪除;②、週期性地確定非活躍性使用者並且傳送郵件給這些使用者,使這些使用者返回到你的網站中。
三、ABP後臺服務 - 整合Hangfire。Hangfire是一個綜合性的後臺作業管理工具。你可以用Hangfire來替換ABP中預設實現的後臺作業管理者。
四、ABP後臺服務 - 整合Quartz。Quartz是一個功能齊全,且開源的作業排程系統,小型應用到大型企業級系統都可以使用它。Quartz是個好的選擇,如果你對後臺作業工人有很高的排程需要的話。
38、一、ABP實時服務 - 通知系統:ABP提供了一個基於實時通知的基礎設施 pub/sub.
二、ABP實時服務 - 整合SignalR
三、ABP實時服務 - 整合Abp.AspNetCore.SignalR
39、一、ABP基礎設施層 - 整合Entity Framework:ABP可以與任何ORM框架協同工作,它內建了對EntityFramework的整合支援。ABP中使用EntityFramework作為ORM框架。
二、ABP基礎設施層 - 整合NHibernate
三、ABP 基礎設施層 - 整合 Entity Framework Core
四、ABP 基礎設施層 - 整合 Entity Framework MySql:啟動模板預設設計是使用Sql Server,但是你可以很容易的修改它來使用MySql。
五、ABP基礎設施層 - 整合Dapper:Dapper 是基於.NET的一種物件關係對映工具。
40、ABP vNext 是下一代ABP框架,支援微服務並使它們相互通訊。自身模組化粒度更小。新的ABP框架將基於.net standard。最終目標是完全抽象的底層資料儲存系統和開發與EF Core無關的模組。
將MongoDB作為第一級別的資料庫,並在沒有任何關係資料庫或ORM假設的情況下設計實體和儲存庫。Bootstrap Tag Helpers用於簡化為Bootstrap 4.x編寫HTML。