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

開源]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)

分享創造快樂