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<TEntity, TKey>,即可轻松完成数据的数据库存取操作。
一个最简单的博客系统,需要有 作者、博客、文章 三个数据实体。

  • 作者 - 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设计如下:

  • 统一使用后台管理界面来提供 博客、文章 的管理

  • 博客管理列表

    • 可以对博客进行审核、更新、删除操作

    • 已登录未开通博客,显示开通按钮

    • 申请之后,博客处理未审核状态

    • 博客更新可用

    • 博主

    • 博客管理员

  • 文章管理列表

    • 博主可以新增文章

    • 博主、博客管理员可以更新、删除文章

至此,博客模块的详细设计设计完毕,后面我们将一步一步来实现这个业务需求。

原文地址:https://www.cnblogs.com/guomingfeng/p/osharpns-steps-index.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

开源]OSharpNS 步步为营系列 - 1. 业务模块设计相关推荐

  1. 前端学习(2885):如何短时间内实现v-for 搭建环境 业务模块设计

  2. 通用业务平台设计(五):预警平台建设

    前言 在上家公司,随着业务的不断拓展(从支持单个国家单个主体演变成支持多个国家多个主体),对预警的诉求越来越紧迫: 如何保障业务的稳定性那?预警可以帮我们提前甄别风险,从而让我们可以在风险来临前将其消 ...

  3. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载

    Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android ...

  4. java项目常见业务模块,C6 架构系列——Maven多模块划分和结构

    一.传统Java Web项目 # 传统Java Web项目 这类项目常见组织方式就是在一个项目里面,放置 src\[java文件] resources\[配置文件] webapp\[js/jsp/cs ...

  5. ML:MLOps系列讲解之《设计机器学习驱动的(ML-powered)软件—我们想要解决的业务问题是什么?》解读

    ML:MLOps系列讲解之<设计机器学习驱动的(ML-powered)软件-我们想要解决的业务问题是什么?>解读 导读:设计机器学习驱动的软件,这部分致力于任何软件项目中最重要的阶段之一- ...

  6. RapidScada免费开源Scada组态软件系列教程4-各模块详细介绍

    RapidScada免费开源Scada组态软件系列教程 系列文章目录 RapidScada免费开源Scada组态软件系列教程1-初识RapidScada RapidScada免费开源Scada组态软件 ...

  7. [开源]OSharpNS - .net core 快速开发框架 - 简介

    OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个框架使用最新稳定版的 ...

  8. Java生鲜电商平台-团购模块设计与架构

    Java生鲜电商平台-团购模块设计与架构 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮 ...

  9. PX4模块设计之三十五:MulticopterAttitudeControl模块

    PX4模块设计之三十五:MulticopterAttitudeControl模块 1. MulticopterAttitudeControl模块简介 2. 模块入口函数 2.1 主入口mc_att_c ...

最新文章

  1. FFmpeg简介及在vc2010下编译步骤
  2. PHP 读取Excel数据
  3. 动手完善个性化弹出提示框的过程及乐趣
  4. [MySQL FAQ]系列 — 线上环境到底要不要开启query cache
  5. jackson json 转换Bean, Bean 里没有对应的值 jackson Unrecognized field
  6. php7判断邮箱格式是否正确,利用php实现验证邮箱格式是否正确
  7. 计算机应用等级考试1,计算机等级考试一级试题
  8. python读取数据库绘图_获取博客积分排名,存入数据库,读取数据进行绘图(python,selenium,matplotlib)...
  9. 河外动态:疑似UFO的编队在太阳附近徘徊
  10. 大数据实效_普洱市以“大数据”思维全面提升新时代干部管理监督实效
  11. CNN英文垃圾邮件分类(数据预处理)
  12. 电源系列3:DCDC BUCK降压电路原理
  13. python 量化投资 长期横盘_python量化投资才是最正确的方式,只教方法,不股荐!...
  14. 单元测试总结反思_考试反思,考试反思作文
  15. 在JavaScript中没有二维数组的概念
  16. 全球排名前四的眼药水,第一款来自欧洲老牌安瞧AGEPHA Pharma,眼科医生自留!
  17. Eclipse 常用快捷键整理
  18. JavaScript+Regex 身份证号码的正则表达式及验证详解
  19. radio、checkbox在使用iCheck后,绑定选中事件
  20. java教程_java学习的秘籍

热门文章

  1. H5在WebView上开发小结
  2. LeetCode:Minimum Path Sum(网格最大路径和)
  3. Yet another nio framework for java
  4. SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高
  5. JavaWeb 项目启动时,后台开启一个线程的方法
  6. XML--使用XML来将字符串分隔成行数据
  7. 错误删除linux分区致Win7引导失败的修复方法
  8. Avalonia跨平台入门第七篇之RadioButton的模板
  9. OxyPlot 导出图片及 WPF 元素导出为图片的方法
  10. C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧