OSharpNS全稱OSharp Framework with .NetStandard2.0,是一個基於.NetStandard2.0
開發的一個.NetCore
快速開發框架。這個框架使用最新穩定版的.NetCore SDK
(當前是.NET Core 2.2),對 AspNetCore 的配置、依賴註入、日誌、快取、物體框架、Mvc(WebApi)、身份認證、許可權授權等模組進行更高一級的自動化封裝,並規範了一套業務實現的程式碼結構與操作流程,使 .Net Core 框架更易於應用到實際專案開發中。
- 開源地址:https://github.com/i66soft/osharp
- 官方示例:https://www.osharp.org
- 檔案中心:https://docs.osharp.org
- VS 外掛:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp
本系列教程中,我們將一步一步實現一個部落格(BlogsPack)的業務模組,並對使用OSharp框架進行業務實現的過程涉及的框架知識進行全面的講解。
透過學習本系列教程,你將對OSharp框架的業務實現有個較全面的瞭解,你將學習到框架的如下知識點:
- 框架推薦的專案檔案組織方式
- 物體類設計,並將物體類載入到資料背景關係
- 模組化的業務層服務設計
- 基於WebAPI的角色 功能許可權 控制
- 基於 角色-物體 的 資料許可權 控制
- Angular前端 選單/按鈕許可權 控制
Pack模組是應用程式中的一個高內聚的子系統,負責完成一類功能或者一系列相關聯的業務處理,是構建 OSharp 應用程式的基本功能單元。一系列低耦合的Pack模組共同組合在一起建立一個 OSharp 應用程式。每個 Pack模組是以一個實現了模組基類(OsharpPack)的類作為入口的,這個類完成本模組的服務新增(AddService)和模組初始化工作(UsePack)。
OsharpPack 基類定義如下:
public abstract class OsharpPack
{
public virtual PackLevel Level => PackLevel.Business;
public virtual int Order => 0;
public bool IsEnabled { get; protected set; }
public virtual IServiceCollection AddServices(IServiceCollection services)
{
return services;
}
public virtual void UsePack(IServiceProvider provider)
{
IsEnabled = true;
}
internal Type[] GetDependPackTypes(Type packType = null)
{
}
}
一個完整的業務模組,要實現一系列相關聯的業務功能,需要一個完整的 資料層 – 服務層 – WebAPI層 – 前端UI層 的程式碼鏈的支援,各個層次各司其職,共同來完成當前模組的業務處理。
業務模組檔案夾結構佈局
OSharp框架有一套推薦的模組檔案夾佈局方案,根據該方案,部落格Blogs
模組的 後端檔案夾 結構推薦如下:
src
├─Liuliu.Blogs.Core
│ └─Blogs
│ ├─BlogsPack.cs
│ ├─BlogsService.cs
│ ├─BlogsService.Blog.cs
│ ├─BlogsService.Post.cs
│ ├─IBlogsContract.cs
│ ├─Dtos
│ │ ├─BlogInputDto.cs
│ │ ├─BlogOutputDto.cs
│ │ ├─PostInputDto.cs
│ │ └─PostOutputDto.cs
│ └─Entities
│ ├─Blog.cs
│ └─Post.cs
├─Liuliu.Blogs.EntityConfiguration
│ └─Blogs
│ ├─BlogConfiguration.cs
│ └─PostConfiguration.cs
└─Liuliu.Blogs.Web
└─Areas
└─Admin
└─Controllers
└─Blogs
├─BlogController.cs
└─PostController.cs
部落格Blogs
模組相應的 Angular 前端檔案夾 結構推薦如下:
src
└─app
└─routes
└─blogs
├─blogs.module.ts
├─blogs.routing.ts
├─blog
│ ├─blog.component.html
│ └─blog.component.ts
└─post
├─post.component.html
└─post.component.ts
部落格業務需求分析
- 已登入 並且未開通部落格的使用者,可以向系統申請開通部落格
- 部落格管理員 審核並開通部落格,並給相應使用者分配 博主 角色
- 部落格管理員 可以對部落格、文章進行 更新、刪除 的管理操作
- 博主 可以對部落格進行更新操作
- 博主 可以對文章進行 新增、更新、刪除 操作
- 部落格、文章均開啟 邏輯刪除 功能,保留歷史資料
資料層
OSharp的資料層,主要是 資料物體 的定義,只要資料物體定義好,並做好 資料物體對映,再配合框架中已定義好的資料倉儲 IRepository,即可輕鬆完成資料的資料庫存取操作。
一個最簡單的部落格系統,需要有 作者、部落格、文章 三個資料物體。
-
作者 – User
部落格系統的作者就是OSharp框架的 使用者(User),直接使用即可。
-
部落格 – Blog
Id int 部落格編號 主鍵,唯一 是 是 Url string 部落格地址 唯一 是 是 Display string 部落格顯示名稱 是 是 IsEnabled boolean 已開通 否 是 CreatedTime DateTime 建立時間 否 是 DeletedTime DateTime 邏輯刪除時間 可空 否 否 UserId int 博主編號 外來鍵,一對一 否 是 -
文章 – Post
Id int 文章編號 主鍵,唯一 是 是 Title string 文章標題 是 是 Content string 文章內容 是 是 CreatedTime DateTime 建立時間 否 是 DeletedTime DateTime 邏輯刪除時間 可空 否 否 BlogId int 部落格Id 外來鍵,多對一 否 是 UserId int 作者編號 外來鍵,多對一 否 是
服務層
服務層負責實現模組的業務處理,是整個系統的最核心部分,一個系統有什麼功能,能對外提供什麼樣的服務,都是在服務層實現的。
部落格 | 申請開通、開通審核、更新、刪除 |
文章 | 新增、更新、刪除 |
WebAPI層
WebAPI層負責對外提供資料操作API,並對API進行授權約束。
-
部落格管理 – Blog
申請開通 登入訪問 已登入未開通部落格的使用者 讀取 角色訪問 部落格管理員、博主 開通審核 角色訪問 部落格管理員 更新 角色訪問 部落格管理員、博主 刪除 角色訪問 部落格管理員 -
文章管理 – Post
讀取 角色訪問 部落格管理員、博主 新增 角色訪問 博主 更新 角色訪問 部落格管理員、博主 刪除 角色訪問 部落格管理員、博主
前端UI層
前端UI層是整個系統的對外操作介面,是直面終端使用者的終端,整個系統最終表現形式全靠前端展現出現。
部落格模組UI設計如下:
- 統一使用後臺管理介面來提供 部落格、文章 的管理
- 部落格管理串列
- 可以對部落格進行審核、更新、刪除操作
- 已登入未開通部落格,顯示開通按鈕
- 申請之後,部落格處理未審核狀態
- 部落格更新可用
- 博主
- 部落格管理員
- 文章管理串列
- 博主可以新增文章
- 博主、部落格管理員可以更新、刪除文章
至此,部落格模組的詳細設計設計完畢,後面我們將一步一步來實現這個業務需求。
朋友會在“發現-看一看”看到你“在看”的內容