https://aspnetboilerplate.com/
https://github.com/aspnetboilerplate/aspnetboilerplate
https://aspnetboilerplate.com/Pages/Documents/Zero/Startup-Template-Core
框架特點
- 依賴注入 - ABP提供了一個慣用的DI基礎框架,所謂慣用,就是大家平常使用的DI方式一致,保持大家的使用習慣。因為這個示例是在應用服務層,所以注入容器中的實例生命周期都是短時的(每個請求創建一次,生命周期與請求相同)。 它可以簡單方便的注入任何依賴,比如在本示例中的IRepository。
- 倉儲 - ABP可以為每一個實體都創建一個默認倉儲,在示例中是IRepository, 默認倉儲有許多非常有用的方法,例如示例中的FirstOrDefaultAsync, 並且我們可以非常容易的根據我們自己需求來擴展倉儲。倉儲對DBMS和ORM做了抽象並簡化了數據訪問邏輯。
- 授權- ABP可以使用聲明式的方式來檢查權限。在示例中,如果一個用戶沒有登錄,或者沒有“UpdateTasks”的權限,那么他將不能訪問UpdateTask方法。 ABP不單單使用聲明式的特性來檢查權限,它還提供了其他的授權方式
- 請求驗證- ABP自動的檢查請求輸入(input)是否為null, 並且可以基於標准的數據注解和自定義驗證規則來檢查輸入中的屬性是否合法。如果請求不合法,它將會拋出一個驗證異常。
- 審計日志- ABP會基於慣例和配置,自動為每一個請求記錄訪問的用戶、瀏覽器、IP地址、調用的服務、方法、參數、調用時間、耗時、和其它一些信息。
- 工作單元- 在ABP中,每個應用服務方法,都被默認視為一個工作單元. 在進入方法時,ABP會自動的打開連接並開啟事務,如果方法在執行過程沒有任何異常,並且成功完成,那么在退出方法時,ABP會自動提交事務並釋放連接。不管方法中使用了一個還是多個倉儲,他們都是原子的,在一個事務中,所有的實體改變都會在事務提交時自動保存。正如示例中所示,我們甚至都不用調用顯示的 '_repository.Update(task)'方法來保存數據更新。 不過我個人建議盡管可以不顯示調用更新,但是從代碼的可讀性和可維護性還是顯示的調用'_repository.Update(task)'方法
- 異常處理- 在ABP我們幾乎不用手動的來處理異常,ABP會默認自動處理所有異常。如果有異常發生,ABP會自動的記錄它,並返回合適的結果給客戶端。例如,如果這是一個AJAX請求,它會返回一個JSON對象給客戶端,並指明有一個錯誤發生。它會向客戶端隱藏真實的異常,除非我們使用UserFriendlyException.
- 日志- 我們可以使用基類中定義的Logger對象來寫日志。 ABP默認使用Log4Net來寫日志,當然我們也可以通過修改配置來使用其他的日志框架。
- 本地化(多語言)- 在示例中,當拋出異常時,使用了"L"方法,它會根據用戶文化配置自動進行本地化處理。
- 自動映射- 在示例的最后一行,我們使用了ABP的MapTo擴展方法來講輸入對象的屬性映射到實體對象的屬性。它使用了AutoMapper庫來執行映射,我們可以很容易的基於命名約定(簡單來講就是屬性名相同,當然也可以指定)來將一個對象的屬性來映射到另一個對象的屬性。通常不同層都會定義自己的數據對象模型,而在層與層之間進行數據交換時,就設計到不同數據對象的轉換,這個時候就是AutoMapper大顯身手的好時機。
- 動態API層- TaskAppService只是一個一般的類,通常我們需要寫一個Web API Controller包裝器來將TaskAppService的方法以API的形式暴露給客戶端調用,但是ABP在運行時已經自動為AppService的方法生成了API接口,所以這樣看起來,就像是客戶端直接調用了AppService的方法(但實際不是)。
- 動態Javascript AJAX代理- ABP在前端為應用服務的調用創建了代理方法,這樣就可以在前端像調用Javascript方法一樣調用應用服務。
此外,除了這個示例中展示的ABP的優勢以外,ABP還提供了一個健壯的基礎架構和應用模型。包括模塊化、多租戶、緩存、配置管理、調度和后台任務、數據過濾、領域時間、單元測試和集成測試等等。它讓我們可以集中關注在業務實現上,而不用重復的去造輪子
官網下載
https://aspnetboilerplate.com/Templates
項目結構
Application應用層:應用層提供一些應用服務(Application Services)方法供展現層調用。一個應用服務方法接收一個DTO(數據傳輸對象)作為輸入參數,使用這個輸入參數執行特定的領域層操作,並根據需要可返回另一個DTO。
Core領域核心層,領域層就是業務層,是一個項目的核心,所有業務規則都應該在領域層實現。這個項目里面,除了定義所需的領域實體類外,其實可以定義我們自己的自定義的倉儲對象(類似DAL/IDAL),以及定義自己的業務邏輯層(類似BLL/IBLL),以及基於AutoMapper映射規則等內容。
EntityFrameworkCore 實體框架核心層,這個項目不需要修改太多內容,只需要在DbContext里面加入對應領域對象的倉儲對象即可。
Migrator數據遷移層,這個是一個輔助創建的控制台程序項目,如果基於DB First,我們可以利用它來創建我們項目的初始化數據庫。
Web.Core Web核心層,基於Web或者Web API的核心層,提供了對身份登陸驗證的基礎處理,沒有其他內容。
Web.Core.Host Web API的宿主層,也是動態發布Web API的核心內容,另外在Web API里面整合了Swagger,使得我們可以方便對Web API的接口進行調試。
Tests 單元測試層,這個提供了一些應用層對象的模擬測試,其中測試的數據庫使用的是Entity Framework 的內存數據庫,不影響實際數據庫內容。
設置啟動項,修改appsettings
創建數據表
程序包管理器控制台並運行Update-Database命令以創建數據庫
還原Libman
右鍵單擊libman.json文件。然后單擊“還原客戶端庫”。
運行並登錄
用戶名admin,密碼為123qwe
其它
框架介紹:https://www.cnblogs.com/wuhuacong/p/10919020.html
框架特點:https://www.cnblogs.com/lcyhjx/p/8688880.html