大家好,我是宝弟!
今天给大家推荐一个基于.NetStandard2.x 开发的一个.NetCore 快速开发框架OSharp。OSharp 全称 OSharp Framework with .NetStandard2.x,是一个基于.NetStandard2.x 开发的一个.NetCore 快速开发框架。这个框架使用最新稳定版的.NetCore SDK(当前是.NET Core 3.1),对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、权限授权等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net Core 框架更易于应用到实际项目开发中。.
项目结构
模块化的组件设计
框架设计了一个模块(Pack)的系统,所有实现了模块基类(OsharpPack)的类都视为一个独立的模块,一个模块可以独立添加服务(AddServices),并可在初始化时应用服务(UsePack)进行模块初始化。
自动化的依赖注入机制
框架定义了ISingletonDependency、IScopeDependency、ITransientDependency三个空接口对应 DependencyInjection 中的三种服务生命周期,系统初始化时,通过反射检索程序集的方式,检索出所有服务类型(ServiceType)与服务实现(ImplementationType)及生命周期类型(ServiceLifetime)的相关数据,对依赖注入的 ServiceCollection 进行全自动初始化。
UnitOfWork-Repository 模式,EFCore 上下文动态构建
数据模块使用了UnitOfWork-Repository的模式来设计,设计了一个泛型的实体仓储接口IRepository<TEntity,TKey>,避免每个实体都需实现一个仓储的繁琐操作。设计了IUnitOfWork接口来管理事务,通过 UnitOfWork 模式管理 DbContext 的创建,使同上下文类型同数据库连接字符串的上下文使用相同 DbConnection对象来创建,达到多上下文的事务同步能力。
基于 AspNetCore 的 Identity 的身份认证设计系统
重新设计了用户存储UserStore和角色存储RoleStore,使用框架内设计的IRepository<TEntity,TKey>数据仓储接口来实现对数据的仓储操作,使 Identity身份认证系统与框架完美结合,避免了使用官方的Microsoft.AspNetCore.Identity.EntityFrameworkCore造成多个上下文或者被强制使用 Identity 上下文作为系统数据上下文来实现业务造成的尴尬。
一个强大的功能权限与数据权限的授权体系
从底层开始,自动收集了系统的所有业务点(IFunction)和数据实体(IEntityInfo),用于对系统的功能权限、数据权限、数据缓存、操作审计 等实用功能提供数据支持。
设计了一个树形结构的业务模块体系(Module),对应着后端向前端开放的操作点(菜单/按钮),一个模块可由一个或多个功能点构成,模块是对外开放的特殊功能点,是进行角色/用户功能授权的单位。把一个模块授权给角色,角色即拥有了一个或多个功能点的操作权限。
集成 Swagger 后端 API 文档系统
OSharp 快速启动模板的开发模式,集成了Swagger API 文档生成组件,更方便了前后端分离的开发模式中前后端开发人员的数据接口对接工作。基于Swagger的工作原理,API 的输入输出都需使用强类型的数据类型,Swagger才能发挥更好的作用,而 OSharp 框架通过AutoMapper的ProjectTo对业务实体到输出 DTOIOutputDto提供了自动映射功能,能有效减轻后端开发中数据对象属性映射的工作量。
OSharp 框架制作了一个基于dotnet cli
命令行工具的快速启动模板,下面演示如何来使用这个模板快速创建一个基于 OSharp 框架的初始化项目。
1. 安装最新版本 dotnetcore sdk
OSharp 当前版本(6.0.0)使用了 .net
当前最新版本 6.0.0
,所以对应的 net sdk
需要安装到对应版本 >=v6.0.0。
2. 安装 OSharp 的dotnet new
项目模板
在任意空白目录,打开 cmd
或powershell
命令行窗口,执行命令
dotnet new -i OSharp.Template.WebApi
执行后,将能看到osharp_xxx
系列的命令已安装到列表中
3. 执行osharp
命令,获取项目一键项目安装脚本
dotnet new osharp
执行后,将得到一个名为osharp.bat
的批处理脚本文件
4. 运行脚本文件,生成项目初始化代码
直接执行osharp.bat
脚本代码,将会提示 请输入项目名称,推荐形如 “公司.项目”的模式:
,此名称将用作解决方案名称、工程名称起始部分、代码中的namespace
起始部分。例如输入Liuliu.Demo
,将生成如下代码结构:
5. 用 VS 打开解决方案
打开解决方案后,各个工程之间的引用关系已配置好,osharp 框架的类库已引用 nuget.org 上的相应版本,并将自动还原好。项目结构如图所示:
项目代码结构说明:
-
Liuliu.Demo.Core:业务核心工程,顶层文件夹以业务模块内聚,每个文件夹按职责划分文件夹,通常可包含传输对象
Dtos
、实体类型Entities
、事件处理Events
等,业务接口 IXXXContract 与业务实现 IXXXService 放在外边,如果文件数量多的话也可以建文件夹存放。 -
Liuliu.Demo.EntityConfiguration:EFCore 实体映射工程,用于配置各个业务实体映射到数据库的映射细节。文件夹也推荐按模块内聚。
-
Liuliu.Demo.Web:网站的 Hosting 项目,按常规方式使用即可
项目启动配置
-
按实际环境修改配置文件
appsetting.Development.json
中的OSharp:DbContexts:[SqlServer|MySql]
中的配置信息,ConnectionString
为数据库连接串,AutoMigrationEnabled
为是否开启自动迁移 -
如未开启
AutoMigrationEnabled
的自动迁移功能,还需要在nuget 控制台
手动执行迁移操作
Update-Database
-
配置好后,即可正常启动端口号为
7001
的项目,启动后开发模式将进入Swagger
的后端 Api 接口的文档页。
6. Angular7 的前端项目启动
前端项目使用了ng-alain
和kendoui
作为 UI 进行开发的,需要熟悉nodejs
,angular7
等技术。
安装NodeJS
,搭建前端技术环境
-
安装最新版本 NodeJS:angular7 需要最新版本(node 10.x 和 npm 6.x 以上的版本)的 NodeJS,请到 NodeJS 官方网站 下载最新版本的 NodeJS 进行安装。
-
设置 npm 的淘宝镜像仓库:由于 npm 的国外仓储会很慢,所以最好把 npm 仓库地址指定国内镜像,推荐淘宝镜像:
npm config set registry https://registry.npm.taobao.org
-
安装全局 Angular/Cli:如果 Angular/Cli 没有安装,执行如下命令全局安装 Angular Angular 的快速启动,请参考Angular 官方文档
npm install -g @angular/cli
-
下载安装 Visual Studio Code:前端最好用的 IDE,官方下载
使用 VS Code 打开 Angular 前端项目
-
定位到项目的目录
src/ui/ng-alain
,在空白处点右键,使用 VS Code 打开项目,可看到如下结构:
-
按
Ctrl+Tab
快捷键,调出 VS Code 的命令行控制台,输入 NodeJS 包安装命令:npm install
-
包安装完成后,输入项目启动命令:
npm start
此命令将会执行如下命令:ng serve --port 4201 --proxy-config proxy.config.json --open
,其中--proxy-config proxy.config.json
对前端项目发起的 API 请求进行了代理,所有以 /api/
开头的请求,都会转发到服务端项目中进行处理,代理的实际配置如下:
{ "/api": { "target": "http://localhost:7001", "secure": false } }
至此,项目启动完成,最终效果如下图所示:
系统登录
仪表盘
内容管理
用户管理
角色管理
模块管理
功能管理
数据实体管理
数据权限管理
日志审计
资源获取方式
https://gitee.com/i66soft/osharp