歡迎光臨
每天分享高質量文章

開源]OSharpNS 步步為營系列 – 1. 業務模組設計

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框架的業務實現有個較全面的瞭解,你將學習到框架的如下知識點:

  1. 框架推薦的專案檔案組織方式
  2. 物體類設計,並將物體類載入到資料背景關係
  3. 模組化的業務層服務設計
  4. 基於WebAPI的角色 功能許可權 控制
  5. 基於 角色-物體 的 資料許可權 控制
  6. 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設計如下:

  • 統一使用後臺管理介面來提供 部落格、文章 的管理
  • 部落格管理串列
    • 可以對部落格進行審核、更新、刪除操作
    • 已登入未開通部落格,顯示開通按鈕
    • 申請之後,部落格處理未審核狀態
    • 部落格更新可用
    • 博主
    • 部落格管理員
  • 文章管理串列
    • 博主可以新增文章
    • 博主、部落格管理員可以更新、刪除文章

至此,部落格模組的詳細設計設計完畢,後面我們將一步一步來實現這個業務需求。


已同步到看一看
贊(0)

分享創造快樂